sapling/tests/test-commitcloud-backup.t
Mark Thomas 43bc04968a commitcloud: backup and sync all non-public commits
Summary:
Commit cloud and infinitepush currently only back up draft commits, omitting
secret ones.  However, commit cloud sync with visibility enabled will try to
sync all visible commits, including the secret ones.  This means users with
secret commits won't be able to sync them to their other machines as they won't
have been backed up.

We eventually want to get rid of the secret phase, which means all non-public
commits should be synced.  Update commit cloud to backup and sync all
non-public commits, including secret ones.

Currently secret commits become draft when they are received by the other
machine.  Since we're planning to get rid of the secret phase, this should be
fine.

Reviewed By: mitrandir77

Differential Revision: D16830832

fbshipit-source-id: 2ce4447ffa750a2edcb194cdf92321c1393ff805
2019-08-16 10:24:44 -07:00

599 lines
25 KiB
Perl

$ enable amend
$ setconfig infinitepushbackup.hostname=testhost
$ setconfig extensions.treemanifest=!
$ . "$TESTDIR/library.sh"
$ . "$TESTDIR/infinitepush/library.sh"
$ setupcommon
Setup server
$ hg init repo
$ cd repo
$ setupserver
$ cd ..
Backup empty repo
$ hg clone ssh://user@dummy/repo client -q
$ cd client
$ hg cloud backup
nothing to back up
$ mkcommit commit
$ hg prune .
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
working directory now at 000000000000
1 changesets pruned
hint[strip-hide]: 'hg strip' may be deprecated in the future - use 'hg hide' instead
hint[hint-ack]: use 'hg hint --ack strip-hide' to silence these hints
$ mkcommit newcommit
$ hg cloud backup
backing up stack rooted at 606a357e69ad
remote: pushing 1 commit:
remote: 606a357e69ad newcommit
commitcloud: backed up 1 commit
Re-clone the client
$ cd ..
$ rm -rf client
$ hg clone ssh://user@dummy/repo client -q
$ cd client
Pushing in this new, empty clone shouldn't clear the old backup
$ hg cloud backup
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/heads/606a357e69adb2e36d559ae3237626e82a955c9d 606a357e69adb2e36d559ae3237626e82a955c9d
Make commit and backup it.
$ mkcommit commit
$ hg cloud backup
backing up stack rooted at 7e6a6fd9c7c8
remote: pushing 1 commit:
remote: 7e6a6fd9c7c8 commit
commitcloud: backed up 1 commit
$ scratchnodes
606a357e69adb2e36d559ae3237626e82a955c9d 9fa7f02468b18919035248ab21c8267674c0a3d6
7e6a6fd9c7c8c8c307ee14678f03d63af3a7b455 168423c30397d95ef5f44d883f0887f0f5be0936
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/heads/7e6a6fd9c7c8c8c307ee14678f03d63af3a7b455 7e6a6fd9c7c8c8c307ee14678f03d63af3a7b455
Make first commit public (by doing push) and then backup new commit
$ hg push
pushing to ssh://user@dummy/repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
$ mkcommit newcommit
$ hg cloud backup
backing up stack rooted at 94a60f5ad8b2
remote: pushing 1 commit:
remote: 94a60f5ad8b2 newcommit
commitcloud: backed up 1 commit
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/heads/94a60f5ad8b2e007240007edab982b3638a3f38d 94a60f5ad8b2e007240007edab982b3638a3f38d
Create obsoleted commit
$ mkcommit obsoletedcommit
$ hg prune .
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
working directory now at 94a60f5ad8b2
1 changesets pruned
hint[strip-hide]: 'hg strip' may be deprecated in the future - use 'hg hide' instead
hint[hint-ack]: use 'hg hint --ack strip-hide' to silence these hints
Make obsoleted commit non-extinct by committing on top of it
$ hg --hidden up 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ mkcommit ontopofobsoleted
Backup both of them
$ hg cloud backup
backing up stack rooted at 94a60f5ad8b2
remote: pushing 3 commits:
remote: 94a60f5ad8b2 newcommit
remote: 361e89f06232 obsoletedcommit
remote: d5609f7fa633 ontopofobsoleted
commitcloud: backed up 2 commits
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
Create one more head and run `hg cloud backup`. Make sure that only new head is pushed
$ hg up 0
0 files updated, 0 files merged, 3 files removed, 0 files unresolved
$ mkcommit newhead
$ hg cloud backup
backing up stack rooted at 3a30e220fe42
remote: pushing 1 commit:
remote: 3a30e220fe42 newhead
commitcloud: backed up 1 commit
Create two more heads and backup them
$ hg up 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ mkcommit newhead1
$ hg up 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ mkcommit newhead2
$ hg cloud backup
backing up stack rooted at f79c5017def3
remote: pushing 1 commit:
remote: f79c5017def3 newhead1
backing up stack rooted at 667453c0787e
remote: pushing 1 commit:
remote: 667453c0787e newhead2
commitcloud: backed up 2 commits
Backup in background
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/667453c0787e7830fdfb86db0f8c29aa7af2a1ea 667453c0787e7830fdfb86db0f8c29aa7af2a1ea
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
infinitepush/backups/test/testhost$TESTTMP/client/heads/f79c5017def3b9af9928edbb52cc620c74b4b291 f79c5017def3b9af9928edbb52cc620c74b4b291
$ mkcommitautobackup newcommit
$ waitbgbackup
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/773a3ba2e7c25358df2e5b3cced70371333bc61c 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
infinitepush/backups/test/testhost$TESTTMP/client/heads/f79c5017def3b9af9928edbb52cc620c74b4b291 f79c5017def3b9af9928edbb52cc620c74b4b291
Backup with bookmark
$ mkcommit commitwithbookmark
$ hg book abook
$ hg cloud backup
backing up stack rooted at 667453c0787e
remote: pushing 3 commits:
remote: 667453c0787e newhead2
remote: 773a3ba2e7c2 newcommit
remote: 166ff4468f7d commitwithbookmark
commitcloud: backed up 1 commit
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 166ff4468f7da443df90d268158ba7d75d52585a
infinitepush/backups/test/testhost$TESTTMP/client/heads/166ff4468f7da443df90d268158ba7d75d52585a 166ff4468f7da443df90d268158ba7d75d52585a
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
infinitepush/backups/test/testhost$TESTTMP/client/heads/f79c5017def3b9af9928edbb52cc620c74b4b291 f79c5017def3b9af9928edbb52cc620c74b4b291
Backup only bookmarks. First, set a low limit to prevent the backup.
$ hg book newbook
$ hg cloud backup --config infinitepushbackup.backupbookmarklimit=0
warning: commitcloud: not pushing backup bookmarks for infinitepush/backups/test/testhost$TESTTMP/client as there are too many (1 > 0)
nothing to back up
$ scratchbookmarks | grep newbook
[1]
New remove the limit and check the backup works.
$ hg cloud backup
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 166ff4468f7da443df90d268158ba7d75d52585a
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 166ff4468f7da443df90d268158ba7d75d52585a
infinitepush/backups/test/testhost$TESTTMP/client/heads/166ff4468f7da443df90d268158ba7d75d52585a 166ff4468f7da443df90d268158ba7d75d52585a
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
infinitepush/backups/test/testhost$TESTTMP/client/heads/f79c5017def3b9af9928edbb52cc620c74b4b291 f79c5017def3b9af9928edbb52cc620c74b4b291
Nothing changed, make sure no backup and no connection to the server happens
$ hg cloud backup --debug
nothing to back up
Obsolete a head, make sure backup happens
$ hg prune .
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
working directory now at 773a3ba2e7c2
1 changesets pruned
hint[strip-hide]: 'hg strip' may be deprecated in the future - use 'hg hide' instead
hint[hint-ack]: use 'hg hint --ack strip-hide' to silence these hints
$ hg cloud backup --traceback
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/773a3ba2e7c25358df2e5b3cced70371333bc61c 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
infinitepush/backups/test/testhost$TESTTMP/client/heads/f79c5017def3b9af9928edbb52cc620c74b4b291 f79c5017def3b9af9928edbb52cc620c74b4b291
Rebase + backup. Make sure that two heads were deleted and head was saved
$ hg log --graph -T '{node} {desc}'
@ 773a3ba2e7c25358df2e5b3cced70371333bc61c newcommit
|
o 667453c0787e7830fdfb86db0f8c29aa7af2a1ea newhead2
|
| o f79c5017def3b9af9928edbb52cc620c74b4b291 newhead1
|/
| o 3a30e220fe42e969e34bbe8001b951a20f31f2e8 newhead
|/
| o d5609f7fa63352da538eeffbe3ffabed1779aafc ontopofobsoleted
| |
| x 361e89f06232897a098e3a11c49d9d8987da469d obsoletedcommit
| |
| o 94a60f5ad8b2e007240007edab982b3638a3f38d newcommit
|/
o 7e6a6fd9c7c8c8c307ee14678f03d63af3a7b455 commit
$ hg rebase -s f79c5017de -d 773a3ba2e7c2
rebasing 5:f79c5017def3 "newhead1"
$ hg cloud backup
backing up stack rooted at 667453c0787e
remote: pushing 3 commits:
remote: 667453c0787e newhead2
remote: 773a3ba2e7c2 newcommit
remote: 2d2e01441947 newhead1
commitcloud: backed up 1 commit
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/heads/2d2e01441947afbb6bb5ae0efbb901f3eebe3fbd 2d2e01441947afbb6bb5ae0efbb901f3eebe3fbd
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
Make a few public commits. Make sure we don't backup them
$ hg up 2d2e01441947
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(leaving bookmark newbook)
$ mkcommit public1
$ mkcommit public2
$ hg log -r tip -T '{rev}'
11 (no-eol)
$ hg push -r '2d2e01441947::.'
pushing to ssh://user@dummy/repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 5 changesets with 5 changes to 5 files
$ hg log --graph -T '{node} {desc} {phase}'
@ 3446a384dd701da41cd83cbd9562805fc6412c0e public2 public
|
o bd2412178ef2d3f3aaaf8a4f2385bdd64b5c5e54 public1 public
|
o 2d2e01441947afbb6bb5ae0efbb901f3eebe3fbd newhead1 public
|
o 773a3ba2e7c25358df2e5b3cced70371333bc61c newcommit public
|
o 667453c0787e7830fdfb86db0f8c29aa7af2a1ea newhead2 public
|
| o 3a30e220fe42e969e34bbe8001b951a20f31f2e8 newhead draft
|/
| o d5609f7fa63352da538eeffbe3ffabed1779aafc ontopofobsoleted draft
| |
| x 361e89f06232897a098e3a11c49d9d8987da469d obsoletedcommit draft
| |
| o 94a60f5ad8b2e007240007edab982b3638a3f38d newcommit draft
|/
o 7e6a6fd9c7c8c8c307ee14678f03d63af3a7b455 commit public
$ hg cloud backup
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
$ hg cloud backup
nothing to back up
Backup bookmark that has '/bookmarks/' in the name. Make sure it was escaped
$ hg book new/bookmarks/book
$ hg cloud backup
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/new/bookmarksbookmarks/book 3446a384dd701da41cd83cbd9562805fc6412c0e
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
Backup to different path
$ cat >> .hg/hgrc << EOF
> [paths]
> default = brokenpath
> nondefault = ssh://user@dummy/repo
> EOF
$ hg book somebook
$ hg --config paths.default=brokenpath cloud backup
abort: repository $TESTTMP/client/brokenpath not found!
[255]
$ hg cloud backup --dest nondefault --traceback
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/new/bookmarksbookmarks/book 3446a384dd701da41cd83cbd9562805fc6412c0e
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/somebook 3446a384dd701da41cd83cbd9562805fc6412c0e
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
Backup in background to different path
$ mkcommit backgroundcommittodifferentpath
$ hg cloud backup --dest nondefault --background
$ waitbgbackup
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/abook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/new/bookmarksbookmarks/book 3446a384dd701da41cd83cbd9562805fc6412c0e
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/newbook 773a3ba2e7c25358df2e5b3cced70371333bc61c
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/somebook 268f86e364f9aed2f5bb9d11e2df6381ace129a2
infinitepush/backups/test/testhost$TESTTMP/client/heads/268f86e364f9aed2f5bb9d11e2df6381ace129a2 268f86e364f9aed2f5bb9d11e2df6381ace129a2
infinitepush/backups/test/testhost$TESTTMP/client/heads/3a30e220fe42e969e34bbe8001b951a20f31f2e8 3a30e220fe42e969e34bbe8001b951a20f31f2e8
infinitepush/backups/test/testhost$TESTTMP/client/heads/d5609f7fa63352da538eeffbe3ffabed1779aafc d5609f7fa63352da538eeffbe3ffabed1779aafc
Clean client and repo
$ cd ..
$ rm -rf repo
$ rm -rf client
$ hg init repo
$ cd repo
$ setupserver
$ cd ..
$ hg clone ssh://user@dummy/repo client -q
$ cd client
Create public commit
$ mkcommit initial
$ hg push
pushing to ssh://user@dummy/repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
Make commit and immediately obsolete it, then create a bookmark.
Make sure cloud backup works
$ mkcommit toobsolete
$ hg prune .
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
working directory now at 630839011471
1 changesets pruned
hint[strip-hide]: 'hg strip' may be deprecated in the future - use 'hg hide' instead
hint[hint-ack]: use 'hg hint --ack strip-hide' to silence these hints
$ hg book somebook
$ hg cloud backup
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/somebook 630839011471e17f808b92ab084bedfaca33b110
Make secret commit and bookmark on top of it. Then run cloud backup.
Make sure it was backed up.
t
$ hg book bookonsecret
$ echo secret >> secret
$ hg add secret
$ hg ci -Am secret
$ hg phase -qfs '.'
$ hg cloud backup
backing up stack rooted at dc80aa94cb8b
remote: pushing 1 commit:
remote: dc80aa94cb8b secret
commitcloud: backed up 1 commit
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/bookonsecret dc80aa94cb8b16f962a5fb6e56e9ed234644b4e3
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/somebook 630839011471e17f808b92ab084bedfaca33b110
Create two heads, set maxheadstobackup to 1, make sure only latest head was backed up
$ hg up -q 0
$ mkcommit headone
$ hg up -q 0
$ mkcommit headtwo
$ hg cloud backup --config infinitepushbackup.maxheadstobackup=1
backing up only the most recent 1 head
backing up stack rooted at 6c4f4b30ae4c
remote: pushing 1 commit:
remote: 6c4f4b30ae4c headtwo
commitcloud: backed up 1 commit
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/bookonsecret dc80aa94cb8b16f962a5fb6e56e9ed234644b4e3
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/somebook 630839011471e17f808b92ab084bedfaca33b110
infinitepush/backups/test/testhost$TESTTMP/client/heads/6c4f4b30ae4c2dd928d551836c70c741ee836650 6c4f4b30ae4c2dd928d551836c70c741ee836650
Now set maxheadstobackup to 0 and backup again. Make sure nothing is backed up now
$ hg cloud backup --config infinitepushbackup.maxheadstobackup=0
backing up only the most recent 0 heads
nothing to back up
$ scratchbookmarks
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/bookonsecret dc80aa94cb8b16f962a5fb6e56e9ed234644b4e3
infinitepush/backups/test/testhost$TESTTMP/client/bookmarks/somebook 630839011471e17f808b92ab084bedfaca33b110
infinitepush/backups/test/testhost$TESTTMP/client/heads/6c4f4b30ae4c2dd928d551836c70c741ee836650 6c4f4b30ae4c2dd928d551836c70c741ee836650
Test cloud check command
$ hg cloud backup
backing up stack rooted at cf2adfba1469
remote: pushing 1 commit:
remote: cf2adfba1469 headone
commitcloud: backed up 1 commit
$ hg cloud check
6c4f4b30ae4c2dd928d551836c70c741ee836650 backed up
$ hg cloud check -r 630839011471e17
630839011471e17f808b92ab084bedfaca33b110 not backed up
$ hg cloud check -r . -r 630839011471e17
6c4f4b30ae4c2dd928d551836c70c741ee836650 backed up
630839011471e17f808b92ab084bedfaca33b110 not backed up
Delete a commit from the server
$ rm ../repo/.hg/scratchbranches/index/nodemap/6c4f4b30ae4c2dd928d551836c70c741ee836650
Local state still shows it as backed up, but can check the remote
$ hg cloud check -r "draft()"
cf2adfba146909529bcca8c1626de6b4d9e73846 backed up
6c4f4b30ae4c2dd928d551836c70c741ee836650 backed up
$ hg cloud check -r "draft()" --remote
cf2adfba146909529bcca8c1626de6b4d9e73846 backed up
6c4f4b30ae4c2dd928d551836c70c741ee836650 not backed up
Delete backup state file and try again
$ rm .hg/commitcloud/backedupheads.*
$ hg cloud check -r "draft()"
cf2adfba146909529bcca8c1626de6b4d9e73846 backed up
6c4f4b30ae4c2dd928d551836c70c741ee836650 not backed up
Back the commit up again
$ hg cloud backup
backing up stack rooted at 6c4f4b30ae4c
remote: pushing 1 commit:
remote: 6c4f4b30ae4c headtwo
commitcloud: backed up 1 commit
Hide the commit. Make sure isbackedup still works
$ hg hide 6c4f4b30ae4c2dd928d551836c70c741ee836650
hiding commit 6c4f4b30ae4c "headtwo"
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
working directory now at 630839011471
1 changeset hidden
$ hg cloud check -r 6c4f4b30ae4c2dd928d551836c70c741ee836650 --hidden
6c4f4b30ae4c2dd928d551836c70c741ee836650 backed up
Test hostname option
$ rm -r .hg/infinitepushbackups
$ hg cloud backup --config infinitepushbackup.hostname=hostname
nothing to back up
$ scratchbookmarks | grep test/hostname
infinitepush/backups/test/hostname$TESTTMP/client/bookmarks/bookonsecret dc80aa94cb8b16f962a5fb6e56e9ed234644b4e3
infinitepush/backups/test/hostname$TESTTMP/client/bookmarks/somebook 630839011471e17f808b92ab084bedfaca33b110
infinitepush/backups/test/hostname$TESTTMP/client/heads/cf2adfba146909529bcca8c1626de6b4d9e73846 cf2adfba146909529bcca8c1626de6b4d9e73846
Malformed backup state file
$ echo rubbish > .hg/infinitepushbackups/infinitepushbackupstate*
$ hg cloud backup
corrupt file: infinitepushbackups/infinitepushbackupstate* (No JSON object could be decoded) (glob)
nothing to back up
Run command that creates multiple transactions. Make sure that just one backup is started
$ cd ..
$ rm -rf client
$ hg clone ssh://user@dummy/repo client -q
$ cd client
$ hg debugdrawdag <<'EOS'
> C
> |
> B D
> |/
> A
> EOS
$ hg log -r ':' -G -T '{desc} {node}'
o C 26805aba1e600a82e93661149f2313866a221a7b
|
| o D b18e25de2cf5fc4699a029ed635882849e53ef73
| |
o | B 112478962961147124edd43549aedd1a335e44bf
|/
o A 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
@ initial 630839011471e17f808b92ab084bedfaca33b110
Create logs directory and set correct permissions
$ setuplogdir
$ hg cloud backup --config infinitepushbackup.logdir=$TESTTMP/logs
backing up stack rooted at 426bada5c675
remote: pushing 4 commits:
remote: 426bada5c675 A
remote: 112478962961 B
remote: b18e25de2cf5 D
remote: 26805aba1e60 C
commitcloud: backed up 4 commits
$ hg cloud check -r ':'
630839011471e17f808b92ab084bedfaca33b110 not backed up
426bada5c67598ca65036d57d9e4b64b0c1ce7a0 backed up
112478962961147124edd43549aedd1a335e44bf backed up
b18e25de2cf5fc4699a029ed635882849e53ef73 backed up
26805aba1e600a82e93661149f2313866a221a7b backed up
$ hg rebase -s B -d D --config infinitepushbackup.autobackup=True --config infinitepushbackup.logdir=$TESTTMP/logs
rebasing 2:112478962961 "B" (B)
rebasing 4:26805aba1e60 "C" (C tip)
$ waitbgbackup
$ hg log -r ':' -G -T '{desc} {node}'
o C ffeec75ec60331057b875fc5356c57c3ff204500
|
o B 1ef11233b74dfa8b57e8285fd6f546096af8f4c2
|
| x C 26805aba1e600a82e93661149f2313866a221a7b
| |
o | D b18e25de2cf5fc4699a029ed635882849e53ef73
| |
| x B 112478962961147124edd43549aedd1a335e44bf
|/
o A 426bada5c67598ca65036d57d9e4b64b0c1ce7a0
@ initial 630839011471e17f808b92ab084bedfaca33b110
$ hg cloud check -r 'ffeec75ec + 1ef11233b7'
ffeec75ec60331057b875fc5356c57c3ff204500 backed up
1ef11233b74dfa8b57e8285fd6f546096af8f4c2 backed up
Check the logs, make sure just one process was started
$ cat $TESTTMP/logs/test/*
* starting: hg cloud backup --config 'ui.ssh=python "*/dummyssh" -bgssh' (glob)
backing up stack rooted at 426bada5c675
remote: pushing 4 commits:
remote: 426bada5c675 A
remote: b18e25de2cf5 D
remote: 1ef11233b74d B
remote: ffeec75ec603 C
commitcloud: backed up 2 commits
Check if ssh batch mode enables only for background backup and not for foreground
$ mkcommit ssh1
$ hg cloud backup --debug 2>&1 | debugsshcall
running .* ".*/dummyssh" 'user@dummy' 'hg -R repo serve --stdio' (re)
$ mkcommit ssh2
$ hg cloud backup --background --config infinitepushbackup.logdir=$TESTTMP/logs --config infinitepushbackup.bgdebug=yes
$ waitbgbackup
$ cat $TESTTMP/logs/test/* | debugsshcall
running .* ".*/dummyssh" -bgssh 'user@dummy' 'hg -R repo serve --stdio' (re)
Fail to push a backup by setting the server maxbundlesize very low
$ cp ../repo/.hg/hgrc $TESTTMP/server-hgrc.bak
$ cat >> ../repo/.hg/hgrc << EOF
> [infinitepush]
> maxbundlesize = 0
> EOF
$ mkcommit toobig
$ hg cloud backup
backing up stack rooted at acf5bae70f50
remote: pushing 3 commits:
remote: acf5bae70f50 ssh1
remote: cb352c98cec7 ssh2
remote: b226c8ca23a2 toobig
push failed: bundle is too big: 1488 bytes. max allowed size is 0 MB
retrying push with discovery
searching for changes
remote: pushing 3 commits:
remote: acf5bae70f50 ssh1
remote: cb352c98cec7 ssh2
remote: b226c8ca23a2 toobig
push of head b226c8ca23a2 failed: bundle is too big: 1488 bytes. max allowed size is 0 MB
commitcloud: failed to back up 1 commit
[2]
$ hg cloud check -r .
b226c8ca23a2db9b70a50978c6d30658683d9e9f not backed up
$ scratchnodes | grep 034e9a5a003f9f7dd44ab4b35187e833d0aad5c3
[1]
Set the limit back high, and try again
$ mv $TESTTMP/server-hgrc.bak ../repo/.hg/hgrc
$ hg cloud backup
backing up stack rooted at acf5bae70f50
remote: pushing 3 commits:
remote: acf5bae70f50 ssh1
remote: cb352c98cec7 ssh2
remote: b226c8ca23a2 toobig
commitcloud: backed up 1 commit
$ hg cloud check -r .
b226c8ca23a2db9b70a50978c6d30658683d9e9f backed up
$ scratchnodes | grep b226c8ca23a2db9b70a50978c6d30658683d9e9f
b226c8ca23a2db9b70a50978c6d30658683d9e9f 17b31b46303cad87ba9dc939fcd19ce0f31c6df8
Remove the backup state file
$ rm .hg/commitcloud/backedupheads.f6bce706
Remote check still succeeds
$ hg cloud check -r . --remote
b226c8ca23a2db9b70a50978c6d30658683d9e9f backed up
Local check should recover the file
$ hg cloud check -r .
b226c8ca23a2db9b70a50978c6d30658683d9e9f backed up