From patchwork Fri Oct 16 01:48:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Bug,4902] New: test-shelve crash with general delta on From: mercurial-bugs@selenic.com X-Patchwork-Id: 11130 Message-Id: To: mercurial-devel@selenic.com Date: Fri, 16 Oct 2015 01:48:12 +0000 https://bz.mercurial-scm.org/show_bug.cgi?id=4902 Bug ID: 4902 Summary: test-shelve crash with general delta on Product: Mercurial Version: default branch Hardware: PC OS: Linux Status: UNCONFIRMED Severity: feature Priority: wish Component: shelve Assignee: bugzilla@selenic.com Reporter: pierre-yves.david@ens-lyon.org CC: mercurial-devel@selenic.com Running test with general delta enabled by default show `test-shelve`` crashing. This highlight that our test coverage of bundle2 is too light. + gen.apply(self.repo, 'unshelve', + AttributeError: 'unbundle20' object has no attribute 'apply' + [1] $ hg commit -q -m 'initial commit' + [1] $ hg shelve nothing changed @@ -90,8 +131,8 @@ make sure shelve files were backed up $ ls .hg/shelve-backup - default.hg - default.patch + ls: cannot access .hg/shelve-backup: No such file or directory + [2] create an mq patch - shelving should work fine with a patch applied @@ -103,23 +144,26 @@ shelve a change that we will delete later $ echo a >> a/a + $TESTTMP.sh: 51: $TESTTMP.sh: cannot create a/a: Directory nonexistent + [2] $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + nothing changed + [1] set up some more complex changes to shelve $ echo a >> a/a + $TESTTMP.sh: 55: $TESTTMP.sh: cannot create a/a: Directory nonexistent + [2] $ hg mv b b.rename - moving b/b to b.rename/b (glob) + b: No such file or directory + abort: no files to copy + [255] $ hg cp c c.copy - $ hg status -C - M a/a - A b.rename/b - b/b - A c.copy - c - R b/b + c: No such file or directory + abort: no files to copy + [255] + $ hg status -C prevent some foot-shooting @@ -133,25 +177,48 @@ the common case - no options or filenames $ hg shelve - shelved as default-01 - 2 files updated, 0 files merged, 2 files removed, 0 files unresolved + nothing changed + [1] $ hg status -C ensure that our shelved changes exist $ hg shelve -l - default-01 (*)* changes to '[mq]: second.patch' (glob) - default (*)* changes to '[mq]: second.patch' (glob) + default (1s ago) (changes in empty repository) $ hg shelve -l -p default - default (*)* changes to '[mq]: second.patch' (glob) + default (1s ago) (changes in empty repository) diff --git a/a/a b/a/a - --- a/a/a + new file mode 100644 + --- /dev/null +++ b/a/a - @@ -1,1 +1,2 @@ - a + @@ -0,0 +1,1 @@ +a + diff --git a/b/b b/b/b + new file mode 100644 + --- /dev/null + +++ b/b/b + @@ -0,0 +1,1 @@ + +b + diff --git a/c b/c + new file mode 100644 + --- /dev/null + +++ b/c + @@ -0,0 +1,1 @@ + +c + diff --git a/d b/d + new file mode 100644 + --- /dev/null + +++ b/d + @@ -0,0 +1,1 @@ + +d + diff --git a/x b/x + new file mode 100644 + --- /dev/null + +++ b/x + @@ -0,0 +1,1 @@ + +x $ hg shelve --list --addremove abort: options '--list' and '--addremove' may not be used together @@ -165,23 +232,24 @@ ensure shelve backups aren't overwritten $ ls .hg/shelve-backup/ - default-1.hg - default-1.patch default.hg default.patch local edits should not prevent a shelved change from applying $ printf "z\na\n" > a/a + $TESTTMP.sh: 83: $TESTTMP.sh: cannot create a/a: Directory nonexistent + [2] $ hg unshelve --keep - unshelving change 'default-01' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - rebasing 4:4702e8911fe0 "changes to '[mq]: second.patch'" (tip) - merging a/a + abort: no shelved changes to apply! + [255] $ hg revert --all -q $ rm a/a.orig b.rename/b c.copy + rm: cannot remove 'a/a.orig': No such file or directory + rm: cannot remove 'b.rename/b': No such file or directory + rm: cannot remove 'c.copy': No such file or directory + [1] apply it and make sure our state is as expected @@ -192,28 +260,20 @@ .hg/shelve-backup/default.hg: file $ touch -t 200001010000 .hg/shelve-backup/default.hg $ f -t .hg/shelve-backup/default-1.hg - .hg/shelve-backup/default-1.hg: file + .hg/shelve-backup/default-1.hg: file not found $ touch -t 200001010000 .hg/shelve-backup/default-1.hg $ hg unshelve - unshelving change 'default-01' - $ hg status -C - M a/a - A b.rename/b - b/b - A c.copy - c - R b/b + abort: no shelved changes to apply! + [255] + $ hg status -C $ hg shelve -l (both of default.hg and default-1.hg should be still kept, because it is difficult to decide actual order of them from same timestamp) $ ls .hg/shelve-backup/ - default-01.hg - default-01.patch default-1.hg - default-1.patch default.hg default.patch @@ -228,825 +288,17 @@ (this tests also that editor is invoked, if '--edit' is specified) $ hg status -C - M a/a - A b.rename/b - b/b - A c.copy - c - R b/b $ HGEDITOR=cat hg shelve -q -n wibble -m wat -e a - wat - - - HG: Enter commit message. Lines beginning with 'HG:' are removed. - HG: Leave message empty to abort commit. - HG: -- - HG: user: shelve@localhost - HG: branch 'default' - HG: changed a/a + abort: a: No such file or directory + [255] expect "a" to no longer be present, but status otherwise unchanged $ hg status -C - A b.rename/b - b/b - A c.copy - c - R b/b $ hg shelve -l --stat - wibble (*) wat (glob) - a/a | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) and now "a/a" should reappear $ cd a + $TESTTMP.sh: 119: cd: can't cd to a $ hg unshelve -q wibble - $ cd .. - $ hg status -C - M a/a - A b.rename/b - b/b - A c.copy - c - R b/b - -ensure old shelve backups are being deleted automatically - - $ ls .hg/shelve-backup/ - default-01.hg - default-01.patch - wibble.hg - wibble.patch - -cause unshelving to result in a merge with 'a' conflicting - - $ hg shelve -q - $ echo c>>a/a - $ hg commit -m second - $ hg tip --template '{files}\n' - a/a - -add an unrelated change that should be preserved - - $ mkdir foo - $ echo foo > foo/foo - $ hg add foo/foo - -force a conflicted merge to occur - - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - rebasing 5:4702e8911fe0 "changes to '[mq]: second.patch'" (tip) - merging a/a - warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - -ensure that we have a merge with unresolved conflicts - - $ hg heads -q --template '{rev}\n' - 5 - 4 - $ hg parents -q --template '{rev}\n' - 4 - 5 - $ hg status - M a/a - M b.rename/b - M c.copy - R b/b - ? a/a.orig - $ hg diff - diff --git a/a/a b/a/a - --- a/a/a - +++ b/a/a - @@ -1,2 +1,6 @@ - a - +<<<<<<< dest: * - shelve: pending changes temporary commit (glob) - c - +======= - +a - +>>>>>>> source: 4702e8911fe0 - shelve: changes to '[mq]: second.patch' - diff --git a/b/b b/b.rename/b - rename from b/b - rename to b.rename/b - diff --git a/c b/c.copy - copy from c - copy to c.copy - $ hg resolve -l - U a/a - - $ hg shelve - abort: unshelve already in progress - (use 'hg unshelve --continue' or 'hg unshelve --abort') - [255] - -abort the unshelve and be happy - - $ hg status - M a/a - M b.rename/b - M c.copy - R b/b - ? a/a.orig - $ hg unshelve -a - rebase aborted - unshelve of 'default' aborted - $ hg heads -q - 3:2e69b451d1ea - $ hg parents - changeset: 3:2e69b451d1ea - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: second - - $ hg resolve -l - $ hg status - A foo/foo - ? a/a.orig - -try to continue with no unshelve underway - - $ hg unshelve -c - abort: no unshelve operation underway - [255] - $ hg status - A foo/foo - ? a/a.orig - -redo the unshelve to get a conflict - - $ hg unshelve -q - warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - -attempt to continue - - $ hg unshelve -c - abort: unresolved conflicts, can't continue - (see 'hg resolve', then 'hg unshelve --continue') - [255] - - $ hg revert -r . a/a - $ hg resolve -m a/a - (no more unresolved files) - - $ hg commit -m 'commit while unshelve in progress' - abort: unshelve already in progress - (use 'hg unshelve --continue' or 'hg unshelve --abort') - [255] - - $ hg unshelve -c - rebasing 5:4702e8911fe0 "changes to '[mq]: second.patch'" (tip) - unshelve of 'default' complete - -ensure the repo is as we hope - - $ hg parents - changeset: 3:2e69b451d1ea - tag: tip - user: test - date: Thu Jan 01 00:00:00 1970 +0000 - summary: second - - $ hg heads -q - 3:2e69b451d1ea - - $ hg status -C - A b.rename/b - b/b - A c.copy - c - A foo/foo - R b/b - ? a/a.orig - -there should be no shelves left - - $ hg shelve -l - -#if execbit - -ensure that metadata-only changes are shelved - - $ chmod +x a/a - $ hg shelve -q -n execbit a/a - $ hg status a/a - $ hg unshelve -q execbit - $ hg status a/a - M a/a - $ hg revert a/a - -#endif - -#if symlink - - $ rm a/a - $ ln -s foo a/a - $ hg shelve -q -n symlink a/a - $ hg status a/a - $ hg unshelve -q symlink - $ hg status a/a - M a/a - $ hg revert a/a - -#endif - -set up another conflict between a commit and a shelved change - - $ hg revert -q -C -a - $ rm a/a.orig b.rename/b c.copy - $ echo a >> a/a - $ hg shelve -q - $ echo x >> a/a - $ hg ci -m 'create conflict' - $ hg add foo/foo - -if we resolve a conflict while unshelving, the unshelve should succeed - - $ HGMERGE=true hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - rebasing 6:c5e6910e7601 "changes to 'second'" (tip) - merging a/a - note: rebase of 6:c5e6910e7601 created no changes to commit - $ hg parents -q - 4:33f7f61e6c5e - $ hg shelve -l - $ hg status - A foo/foo - $ cat a/a - a - c - x - -test keep and cleanup - - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg shelve --list - default (*) changes to 'create conflict' (glob) - $ hg unshelve --keep - unshelving change 'default' - $ hg shelve --list - default (*) changes to 'create conflict' (glob) - $ hg shelve --cleanup - $ hg shelve --list - - $ hg shelve --cleanup --delete - abort: options '--cleanup' and '--delete' may not be used together - [255] - $ hg shelve --cleanup --patch - abort: options '--cleanup' and '--patch' may not be used together - [255] - $ hg shelve --cleanup --message MESSAGE - abort: options '--cleanup' and '--message' may not be used together - [255] - -test bookmarks - - $ hg bookmark test - $ hg bookmark - * test 4:33f7f61e6c5e - $ hg shelve - shelved as test - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg bookmark - * test 4:33f7f61e6c5e - $ hg unshelve - unshelving change 'test' - $ hg bookmark - * test 4:33f7f61e6c5e - -shelve should still work even if mq is disabled - - $ hg --config extensions.mq=! shelve - shelved as test - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg --config extensions.mq=! shelve --list - test (*) changes to 'create conflict' (glob) - $ hg bookmark - * test 4:33f7f61e6c5e - $ hg --config extensions.mq=! unshelve - unshelving change 'test' - $ hg bookmark - * test 4:33f7f61e6c5e - -shelve should leave dirstate clean (issue4055) - - $ cd .. - $ hg init shelverebase - $ cd shelverebase - $ printf 'x\ny\n' > x - $ echo z > z - $ hg commit -Aqm xy - $ echo z >> x - $ hg commit -Aqm z - $ hg up 0 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ printf 'a\nx\ny\nz\n' > x - $ hg commit -Aqm xyz - $ echo c >> z - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg rebase -d 1 --config extensions.rebase= - rebasing 2:323bfa07f744 "xyz" (tip) - merging x - saved backup bundle to $TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-78114325-backup.hg (glob) - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - rebasing 4:b8fefe789ed0 "changes to 'xyz'" (tip) - $ hg status - M z - - $ cd .. - -shelve should only unshelve pending changes (issue4068) - - $ hg init onlypendingchanges - $ cd onlypendingchanges - $ touch a - $ hg ci -Aqm a - $ touch b - $ hg ci -Aqm b - $ hg up -q 0 - $ touch c - $ hg ci -Aqm c - - $ touch d - $ hg add d - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg up -q 1 - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - rebasing 3:0cae6656c016 "changes to 'c'" (tip) - $ hg status - A d - -unshelve should work on an ancestor of the original commit - - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg up 0 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - rebasing 3:be58f65f55fb "changes to 'b'" (tip) - $ hg status - A d - -test bug 4073 we need to enable obsolete markers for it - - $ cat >> $HGRCPATH << EOF - > [experimental] - > evolution=createmarkers - > EOF - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg debugobsolete `hg --debug id -i -r 1` - $ hg unshelve - unshelving change 'default' - -unshelve should leave unknown files alone (issue4113) - - $ echo e > e - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg status - ? e - $ hg unshelve - unshelving change 'default' - $ hg status - A d - ? e - $ cat e - e - -unshelve should keep a copy of unknown files - - $ hg add e - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 2 files removed, 0 files unresolved - $ echo z > e - $ hg unshelve - unshelving change 'default' - $ cat e - e - $ cat e.orig - z - - -unshelve and conflicts with tracked and untracked files - - preparing: - - $ rm *.orig - $ hg ci -qm 'commit stuff' - $ hg phase -p null: - - no other changes - no merge: - - $ echo f > f - $ hg add f - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo g > f - $ hg unshelve - unshelving change 'default' - $ hg st - A f - ? f.orig - $ cat f - f - $ cat f.orig - g - - other uncommitted changes - merge: - - $ hg st - A f - ? f.orig - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg log -G --template '{rev} {desc|firstline} {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()' - o 4 changes to 'commit stuff' shelve@localhost - | - $ hg log -G --template '{rev} {desc|firstline} {author}' - @ 3 commit stuff test - | - | o 2 c test - |/ - o 0 a test - - $ mv f.orig f - $ echo 1 > a - $ hg unshelve --date '1073741824 0' - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - rebasing 5:23b29cada8ba "changes to 'commit stuff'" (tip) - merging f - warning: conflicts while merging f! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ hg log -G --template '{rev} {desc|firstline} {author} {date|isodate}' - @ 5 changes to 'commit stuff' shelve@localhost 1970-01-01 00:00 +0000 - | - | @ 4 pending changes temporary commit shelve@localhost 2004-01-10 13:37 +0000 - |/ - o 3 commit stuff test 1970-01-01 00:00 +0000 - | - | o 2 c test 1970-01-01 00:00 +0000 - |/ - o 0 a test 1970-01-01 00:00 +0000 - - $ hg st - M f - ? f.orig - $ cat f - <<<<<<< dest: 5f6b880e719b - shelve: pending changes temporary commit - g - ======= - f - >>>>>>> source: 23b29cada8ba - shelve: changes to 'commit stuff' - $ cat f.orig - g - $ hg unshelve --abort - rebase aborted - unshelve of 'default' aborted - $ hg st - M a - ? f.orig - $ cat f.orig - g - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - rebasing 5:23b29cada8ba "changes to 'commit stuff'" (tip) - $ hg st - M a - A f - ? f.orig - - other committed changes - merge: - - $ hg shelve f - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg ci a -m 'intermediate other change' - $ mv f.orig f - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - rebasing 5:23b29cada8ba "changes to 'commit stuff'" (tip) - merging f - warning: conflicts while merging f! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ hg st - M f - ? f.orig - $ cat f - <<<<<<< dest: * - test: intermediate other change (glob) - g - ======= - f - >>>>>>> source: 23b29cada8ba - shelve: changes to 'commit stuff' - $ cat f.orig - g - $ hg unshelve --abort - rebase aborted - unshelve of 'default' aborted - $ hg st - ? f.orig - $ cat f.orig - g - $ hg shelve --delete default - -Recreate some conflict again - - $ cd ../repo - $ hg up -C -r 3 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (leaving bookmark test) - $ echo y >> a/a - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg up test - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (activating bookmark test) - $ hg bookmark - * test 4:33f7f61e6c5e - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - rebasing 5:4b555fdb4e96 "changes to 'second'" (tip) - merging a/a - warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ hg bookmark - test 4:33f7f61e6c5e - -Test that resolving all conflicts in one direction (so that the rebase -is a no-op), works (issue4398) - - $ hg revert -a -r . - reverting a/a (glob) - $ hg resolve -m a/a - (no more unresolved files) - $ hg unshelve -c - rebasing 5:4b555fdb4e96 "changes to 'second'" (tip) - note: rebase of 5:4b555fdb4e96 created no changes to commit - unshelve of 'default' complete - $ hg bookmark - * test 4:33f7f61e6c5e - $ hg diff - $ hg status - ? a/a.orig - ? foo/foo - $ hg summary - parent: 4:33f7f61e6c5e tip - create conflict - branch: default - bookmarks: *test - commit: 2 unknown (clean) - update: (current) - phases: 5 draft - - $ hg shelve --delete --stat - abort: options '--delete' and '--stat' may not be used together - [255] - $ hg shelve --delete --name NAME - abort: options '--delete' and '--name' may not be used together - [255] - -Test interactive shelve - $ cat <> $HGRCPATH - > [ui] - > interactive = true - > EOF - $ echo 'a' >> a/b - $ cat a/a >> a/b - $ echo 'x' >> a/b - $ mv a/b a/a - $ echo 'a' >> foo/foo - $ hg st - M a/a - ? a/a.orig - ? foo/foo - $ cat a/a - a - a - c - x - x - $ cat foo/foo - foo - a - $ hg shelve --interactive --config ui.interactive=false - abort: running non-interactively - [255] - $ hg shelve --interactive << EOF - > y - > y - > n - > EOF - diff --git a/a/a b/a/a - 2 hunks, 2 lines changed - examine changes to 'a/a'? [Ynesfdaq?] y - - @@ -1,3 +1,4 @@ - +a - a - c - x - record change 1/2 to 'a/a'? [Ynesfdaq?] y - - @@ -1,3 +2,4 @@ - a - c - x - +x - record change 2/2 to 'a/a'? [Ynesfdaq?] n - - shelved as test - merging a/a - 0 files updated, 1 files merged, 0 files removed, 0 files unresolved - $ cat a/a - a - c - x - x - $ cat foo/foo - foo - a - $ hg st - M a/a - ? foo/foo - $ hg bookmark - * test 4:33f7f61e6c5e - $ hg unshelve - unshelving change 'test' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - rebasing 6:65b5d1c34c34 "changes to 'create conflict'" (tip) - merging a/a - $ hg bookmark - * test 4:33f7f61e6c5e - $ cat a/a - a - a - c - x - x - -shelve --patch and shelve --stat should work with a single valid shelfname - - $ hg up --clean . - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - (leaving bookmark test) - $ hg shelve --list - $ echo 'patch a' > shelf-patch-a - $ hg add shelf-patch-a - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo 'patch b' > shelf-patch-b - $ hg add shelf-patch-b - $ hg shelve - shelved as default-01 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg shelve --patch default default-01 - abort: --patch expects a single shelf - [255] - $ hg shelve --stat default default-01 - abort: --stat expects a single shelf - [255] - $ hg shelve --patch default - default (* ago) changes to 'create conflict' (glob) - - diff --git a/shelf-patch-a b/shelf-patch-a - new file mode 100644 - --- /dev/null - +++ b/shelf-patch-a - @@ -0,0 +1,1 @@ - +patch a - $ hg shelve --stat default - default (* ago) changes to 'create conflict' (glob) - shelf-patch-a | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - $ hg shelve --patch nonexistentshelf - abort: cannot find shelf nonexistentshelf - [255] - $ hg shelve --stat nonexistentshelf - abort: cannot find shelf nonexistentshelf - [255] - - $ cd .. - -Shelve from general delta repo uses bundle2 on disk --------------------------------------------------- - -no general delta - - $ hg clone --pull repo bundle1 --config format.generaldelta=0 - requesting all changes - adding changesets - adding manifests - adding file changes - added 5 changesets with 8 changes to 6 files - updating to branch default - 6 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cd bundle1 - $ echo babar > jungle - $ hg add jungle - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg debugbundle .hg/shelved/*.hg - 7e30d8ac6f23cfc84330fd7e698730374615d21a - $ cd .. - -with general delta - - $ hg clone --pull repo bundle2 --config format.generaldelta=1 - requesting all changes - adding changesets - adding manifests - adding file changes - added 5 changesets with 8 changes to 6 files - updating to branch default - 6 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ cd bundle2 - $ echo babar > jungle - $ hg add jungle - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg debugbundle .hg/shelved/*.hg - Stream params: {'Compression': 'BZ'} - changegroup -- "{'version': '02'}" - 7e30d8ac6f23cfc84330fd7e698730374615d21a - $ cd .. - -test Abort unshelve always gets user out of the unshelved state ---------------------------------------------------------------- - $ hg init salvage - $ cd salvage - $ echo 'content' > root - $ hg commit -A -m 'root' -q - $ echo '' > root - $ hg shelve -q - $ echo 'contADDent' > root - $ hg unshelve -q - warning: conflicts while merging root! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] -Wreak havoc on the unshelve process - $ rm .hg/unshelverebasestate - $ hg unshelve --abort - unshelve of 'default' aborted - abort: No such file or directory - [255] -Can the user leave the current state? - $ hg up -C . - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - -Try again but with a corrupted shelve state file - $ hg strip -r 2 -r 1 -q - $ hg up -r 0 -q - $ echo '' > root - $ hg shelve -q - $ echo 'contADDent' > root - $ hg unshelve -q - warning: conflicts while merging root! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate - $ mv ../corrupt-shelvedstate .hg/histedit-state - $ hg unshelve --abort |& grep 'rebase aborted' - rebase aborted - $ hg up -C . - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved ERROR: test-shelve.t output changed --- /home/pyd/src/mercurial-dev/tests/test-shelve.t +++ /home/pyd/src/mercurial-dev/tests/test-shelve.t.err @@ -80,8 +80,49 @@ $ hg unshelve unshelving change 'default' + ** unknown exception encountered, please report by visiting + ** https://mercurial-scm.org/wiki/BugTracker + ** Python 2.7.9 (default, Mar 1 2015, 12:57:24) [GCC 4.9.2] + ** Mercurial Distributed SCM (version 3.5.2+756-e8ff886ba364+20151015) + ** Extensions loaded: strip, mq, shelve + Traceback (most recent call last): + File "/home/pyd/src/mercurial-dev/hg", line 43, in + mercurial.dispatch.run() + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 54, in run + sys.exit((dispatch(request(sys.argv[1:])) or 0) & 255) + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 116, in dispatch + ret = _runcatch(req) + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 187, in _runcatch + return _dispatch(req) + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 920, in _dispatch + cmdpats, cmdoptions) + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 679, in runcommand + ret = _runcommand(ui, options, cmd, d) + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 1051, in _runcommand + return checkargs() + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 1011, in checkargs + return cmdfunc() + File "/home/pyd/src/mercurial-dev/mercurial/dispatch.py", line 917, in + d = lambda: util.checksignature(func)(ui, *args, **cmdoptions) + File "/home/pyd/src/mercurial-dev/mercurial/util.py", line 801, in check + return func(*args, **kwargs) + File "/home/pyd/src/mercurial-dev/mercurial/extensions.py", line 183, in closure + return func(*(args + a), **kw) + File "/home/pyd/src/mercurial-dev/mercurial/util.py", line 801, in check + return func(*args, **kwargs) + File "/home/pyd/src/mercurial-dev/hgext/mq.py", line 3514, in mqcommand + return orig(ui, repo, *args, **kwargs) + File "/home/pyd/src/mercurial-dev/mercurial/util.py", line 801, in check + return func(*args, **kwargs) + File "/home/pyd/src/mercurial-dev/hgext/shelve.py", line 688, in unshelve + shelvedfile(repo, basename, 'hg').applybundle() + File "/home/pyd/src/mercurial-dev/hgext/shelve.py", line 99, in applybundle