sapling/eden/scm/tests/test-commitcloud-backup-remotefilelog.t

168 lines
5.6 KiB
Perl
Raw Normal View History

#chg-compatible
$ disable treemanifest
$ . "$TESTDIR/library.sh"
$ . "$TESTDIR/infinitepush/library.sh"
$ setupcommon
$ enable remotenames
Setup infinitepush and remotefilelog server
$ hg init repo
$ cd repo
$ setupserver
commitcloud: incorporate infinitepush backups into commitcloud Summary: Merge the functionality of the infinitepushbackup extension (backing up commits to commit cloud) into the commitcloud extension. These two extensions are highly coupled, and the commitcloud extension monkey-patches the infinitepushbackup extension for a lot of its functionality. There is also a lot of code duplication between the two extensions which we can remove if they are part of the same extension. The infinitepushbackup commands (`hg pushbackup`, ...) are moved to subcommands of the `hg cloud` command, e.g. `hg cloud backup`. Each feature of the infinitepushbackup extension is moved to a new module in the commit cloud extension: The `background` module controls background execution of `hg cloud backup` and `hg cloud sync`. The `backupbookmarks` module tracks and updates scratch bookmarks for backups. This will be deprecated in the future. The `backupstate` module tracks whether or not a commit has been backed up. This is now tracked separately from backup bookmarks in a new file: `.hg/commitcloud/backedupheads.<remote-identifier>`. This also covers hidden commits, preventing a re-backup of previously backed up commits when they are unhidden. Previously the commitcloud extension customized the smartlog annotations: `Backing up` became `Syncing`, etc. This is now removed for consistency. Previously the infinitepushbackup extension disabled background backup by injecting an `infinitepushbackup.disableduntil` config entry into the user's config. This is now replaced with a state file at `.hg/commitcloud/autobackup`. Either option can be set to disable auto backup. Commit cloud will wait until both have expired before starting to run background backups again. Reviewed By: DurhamG Differential Revision: D15276939 fbshipit-source-id: 1d28989a157286e47d3dd97ca9c70b27f692dda1
2019-05-20 16:11:59 +03:00
$ setconfig remotefilelog.server=true
$ cd ..
Make client shallow clone
$ hgcloneshallow ssh://user@dummy/repo client
streaming all changes
0 files to transfer, 0 bytes of data
transferred 0 bytes in \d+(\.\d+)? seconds \(0 bytes/sec\) (re)
requesting all changes
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
Create 3 commits, two of which will be stripped. It's important to remove file
that was created in the second commit to make sure it's filelogs won't be
downloaded to the client
$ cd repo
$ mkcommit serverinitialcommit
$ mkcommit committostripfirst
$ hg rm committostripfirst
$ echo 'committostripsecond' >> committostripsecond
$ hg add committostripsecond
$ hg ci -m committostripsecond
$ hg bookmark master
Pull changes client-side
$ cd ../client
$ hg pull
pulling from ssh://user@dummy/repo
streaming all changes
6 files to transfer, * of data (glob)
transferred .* in [\d.]+ seconds \([\d.]+ .*\) (re)
searching for changes
no changes found
Make commit on top of commit that will be stripped server-side. Also make two
bookmarks
$ hg up 'desc(serverinitialcommit)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 files fetched over 1 fetches - \(1 misses, 0.00% hit ratio\) over [\d.]+s (re) (?)
$ hg book goodbooktobackup
$ hg up 'desc(committostripsecond)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(leaving bookmark goodbooktobackup)
1 files fetched over 1 fetches - \(1 misses, 0.00% hit ratio\) over [\d.]+s (re) (?)
$ hg book badbooktobackup
$ mkcommit clientbadcommit
$ hg log --graph -T '{desc} {node}'
@ clientbadcommit 07e73d09a07862bc2b8beb13b72d2347f83e4981
|
o committostripsecond 221b386ae565d9866b4838ae552ce3acc26e9fec
|
o committostripfirst 48acd0edbb460dec0d93314393d41f801a9797ce
|
o serverinitialcommit 22ea264ff89d6891c2889f15f338ac9fa2474f8b
$ cd ..
Strip commit server-side
$ cd repo
$ hg log -r 'desc(committostripfirst)' -T '{node}\n'
48acd0edbb460dec0d93314393d41f801a9797ce
$ hg debugstrip 48acd0edbb460dec0d93314393d41f801a9797ce
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg log --graph -T '{desc}'
@ serverinitialcommit
Add two revisions to a dontbackupnodes config: one is a revision that was really stripped
from the server, another is just a node that doesn't exists in the repo
$ cd ../client
$ cat >> .hg/hgrc << EOF
> [infinitepushbackup]
> dontbackupnodes=48acd0edbb460dec0d93314393d41f801a9797ce,unknownnode
> EOF
Now do a backup, it should not fail
commitcloud: incorporate infinitepush backups into commitcloud Summary: Merge the functionality of the infinitepushbackup extension (backing up commits to commit cloud) into the commitcloud extension. These two extensions are highly coupled, and the commitcloud extension monkey-patches the infinitepushbackup extension for a lot of its functionality. There is also a lot of code duplication between the two extensions which we can remove if they are part of the same extension. The infinitepushbackup commands (`hg pushbackup`, ...) are moved to subcommands of the `hg cloud` command, e.g. `hg cloud backup`. Each feature of the infinitepushbackup extension is moved to a new module in the commit cloud extension: The `background` module controls background execution of `hg cloud backup` and `hg cloud sync`. The `backupbookmarks` module tracks and updates scratch bookmarks for backups. This will be deprecated in the future. The `backupstate` module tracks whether or not a commit has been backed up. This is now tracked separately from backup bookmarks in a new file: `.hg/commitcloud/backedupheads.<remote-identifier>`. This also covers hidden commits, preventing a re-backup of previously backed up commits when they are unhidden. Previously the commitcloud extension customized the smartlog annotations: `Backing up` became `Syncing`, etc. This is now removed for consistency. Previously the infinitepushbackup extension disabled background backup by injecting an `infinitepushbackup.disableduntil` config entry into the user's config. This is now replaced with a state file at `.hg/commitcloud/autobackup`. Either option can be set to disable auto backup. Commit cloud will wait until both have expired before starting to run background backups again. Reviewed By: DurhamG Differential Revision: D15276939 fbshipit-source-id: 1d28989a157286e47d3dd97ca9c70b27f692dda1
2019-05-20 16:11:59 +03:00
$ hg cloud backup > /dev/null
not backing up commits marked as bad: 07e73d09a07862bc2b8beb13b72d2347f83e4981
Now try to restore it from different client. Make sure bookmark
`goodbooktobackup` is restored
$ cd ..
$ hgcloneshallow ssh://user@dummy/repo secondclient
streaming all changes
3 files to transfer, * of data (glob)
transferred 548 bytes in 0.0 seconds (535 KB/sec)
searching for changes
no changes found
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd secondclient
commitcloud: incorporate infinitepush backups into commitcloud Summary: Merge the functionality of the infinitepushbackup extension (backing up commits to commit cloud) into the commitcloud extension. These two extensions are highly coupled, and the commitcloud extension monkey-patches the infinitepushbackup extension for a lot of its functionality. There is also a lot of code duplication between the two extensions which we can remove if they are part of the same extension. The infinitepushbackup commands (`hg pushbackup`, ...) are moved to subcommands of the `hg cloud` command, e.g. `hg cloud backup`. Each feature of the infinitepushbackup extension is moved to a new module in the commit cloud extension: The `background` module controls background execution of `hg cloud backup` and `hg cloud sync`. The `backupbookmarks` module tracks and updates scratch bookmarks for backups. This will be deprecated in the future. The `backupstate` module tracks whether or not a commit has been backed up. This is now tracked separately from backup bookmarks in a new file: `.hg/commitcloud/backedupheads.<remote-identifier>`. This also covers hidden commits, preventing a re-backup of previously backed up commits when they are unhidden. Previously the commitcloud extension customized the smartlog annotations: `Backing up` became `Syncing`, etc. This is now removed for consistency. Previously the infinitepushbackup extension disabled background backup by injecting an `infinitepushbackup.disableduntil` config entry into the user's config. This is now replaced with a state file at `.hg/commitcloud/autobackup`. Either option can be set to disable auto backup. Commit cloud will wait until both have expired before starting to run background backups again. Reviewed By: DurhamG Differential Revision: D15276939 fbshipit-source-id: 1d28989a157286e47d3dd97ca9c70b27f692dda1
2019-05-20 16:11:59 +03:00
$ hg cloud restore
restoring backup for test from $TESTTMP/client on * (glob)
pulling from ssh://user@dummy/repo
no changes found
$ hg book
goodbooktobackup 0:22ea264ff89d
Create a commit which deletes a file. Make sure it is backed up correctly
$ cd ../client
$ hg up -q 'desc(serverinitialcommit)'
$ mkcommit filetodelete
$ hg rm filetodelete
$ hg ci -m 'deleted'
$ hg log -r . -T '{node}\n'
507709f4da22941c0471885d8377c48d6dadce21
commitcloud: incorporate infinitepush backups into commitcloud Summary: Merge the functionality of the infinitepushbackup extension (backing up commits to commit cloud) into the commitcloud extension. These two extensions are highly coupled, and the commitcloud extension monkey-patches the infinitepushbackup extension for a lot of its functionality. There is also a lot of code duplication between the two extensions which we can remove if they are part of the same extension. The infinitepushbackup commands (`hg pushbackup`, ...) are moved to subcommands of the `hg cloud` command, e.g. `hg cloud backup`. Each feature of the infinitepushbackup extension is moved to a new module in the commit cloud extension: The `background` module controls background execution of `hg cloud backup` and `hg cloud sync`. The `backupbookmarks` module tracks and updates scratch bookmarks for backups. This will be deprecated in the future. The `backupstate` module tracks whether or not a commit has been backed up. This is now tracked separately from backup bookmarks in a new file: `.hg/commitcloud/backedupheads.<remote-identifier>`. This also covers hidden commits, preventing a re-backup of previously backed up commits when they are unhidden. Previously the commitcloud extension customized the smartlog annotations: `Backing up` became `Syncing`, etc. This is now removed for consistency. Previously the infinitepushbackup extension disabled background backup by injecting an `infinitepushbackup.disableduntil` config entry into the user's config. This is now replaced with a state file at `.hg/commitcloud/autobackup`. Either option can be set to disable auto backup. Commit cloud will wait until both have expired before starting to run background backups again. Reviewed By: DurhamG Differential Revision: D15276939 fbshipit-source-id: 1d28989a157286e47d3dd97ca9c70b27f692dda1
2019-05-20 16:11:59 +03:00
$ hg cloud backup > /dev/null 2>err
$ grep 'not backing up' err
not backing up commits marked as bad: 07e73d09a07862bc2b8beb13b72d2347f83e4981
$ scratchbookmarks
infinitepush/backups/test/*$TESTTMP/client/bookmarks/goodbooktobackup 22ea264ff89d6891c2889f15f338ac9fa2474f8b (glob)
infinitepush/backups/test/*$TESTTMP/client/heads/507709f4da22941c0471885d8377c48d6dadce21 507709f4da22941c0471885d8377c48d6dadce21 (glob)
Test pullbackups when the client doesn't have the latest public commits. Verify
the client doesn't receive the public commit file data during the pull.
$ cd ../repo
$ mkcommit extracommit
$ cd ../secondclient
$ hg pull -q
$ hg up -q tip
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)
$ mkcommit draftcommit
commitcloud: incorporate infinitepush backups into commitcloud Summary: Merge the functionality of the infinitepushbackup extension (backing up commits to commit cloud) into the commitcloud extension. These two extensions are highly coupled, and the commitcloud extension monkey-patches the infinitepushbackup extension for a lot of its functionality. There is also a lot of code duplication between the two extensions which we can remove if they are part of the same extension. The infinitepushbackup commands (`hg pushbackup`, ...) are moved to subcommands of the `hg cloud` command, e.g. `hg cloud backup`. Each feature of the infinitepushbackup extension is moved to a new module in the commit cloud extension: The `background` module controls background execution of `hg cloud backup` and `hg cloud sync`. The `backupbookmarks` module tracks and updates scratch bookmarks for backups. This will be deprecated in the future. The `backupstate` module tracks whether or not a commit has been backed up. This is now tracked separately from backup bookmarks in a new file: `.hg/commitcloud/backedupheads.<remote-identifier>`. This also covers hidden commits, preventing a re-backup of previously backed up commits when they are unhidden. Previously the commitcloud extension customized the smartlog annotations: `Backing up` became `Syncing`, etc. This is now removed for consistency. Previously the infinitepushbackup extension disabled background backup by injecting an `infinitepushbackup.disableduntil` config entry into the user's config. This is now replaced with a state file at `.hg/commitcloud/autobackup`. Either option can be set to disable auto backup. Commit cloud will wait until both have expired before starting to run background backups again. Reviewed By: DurhamG Differential Revision: D15276939 fbshipit-source-id: 1d28989a157286e47d3dd97ca9c70b27f692dda1
2019-05-20 16:11:59 +03:00
$ hg cloud backup
backing up stack rooted at 1c8212bf302f
commitcloud: backed up 1 commit
remote: pushing 1 commit:
remote: 1c8212bf302f draftcommit
$ cd ../client
$ clearcache
commitcloud: incorporate infinitepush backups into commitcloud Summary: Merge the functionality of the infinitepushbackup extension (backing up commits to commit cloud) into the commitcloud extension. These two extensions are highly coupled, and the commitcloud extension monkey-patches the infinitepushbackup extension for a lot of its functionality. There is also a lot of code duplication between the two extensions which we can remove if they are part of the same extension. The infinitepushbackup commands (`hg pushbackup`, ...) are moved to subcommands of the `hg cloud` command, e.g. `hg cloud backup`. Each feature of the infinitepushbackup extension is moved to a new module in the commit cloud extension: The `background` module controls background execution of `hg cloud backup` and `hg cloud sync`. The `backupbookmarks` module tracks and updates scratch bookmarks for backups. This will be deprecated in the future. The `backupstate` module tracks whether or not a commit has been backed up. This is now tracked separately from backup bookmarks in a new file: `.hg/commitcloud/backedupheads.<remote-identifier>`. This also covers hidden commits, preventing a re-backup of previously backed up commits when they are unhidden. Previously the commitcloud extension customized the smartlog annotations: `Backing up` became `Syncing`, etc. This is now removed for consistency. Previously the infinitepushbackup extension disabled background backup by injecting an `infinitepushbackup.disableduntil` config entry into the user's config. This is now replaced with a state file at `.hg/commitcloud/autobackup`. Either option can be set to disable auto backup. Commit cloud will wait until both have expired before starting to run background backups again. Reviewed By: DurhamG Differential Revision: D15276939 fbshipit-source-id: 1d28989a157286e47d3dd97ca9c70b27f692dda1
2019-05-20 16:11:59 +03:00
$ hg cloud restore --reporoot $TESTTMP/secondclient
restoring backup for test from $TESTTMP/secondclient on * (glob)
pulling from ssh://user@dummy/repo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 0 files
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
$ hg log -r 7644808a0e88 --stat
changeset: 6:7644808a0e88
bookmark: default/master
hoistedname: master
parent: 0:22ea264ff89d
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: extracommit
extracommit | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over * (glob) (?)