# HG changeset patch # User Martin von Zweigbergk # Date 1544049969 28800 # Node ID 1b836cee2d9139e566df2e44ca7583557d35d2cf # Parent 74e3df7660521b6a180dca9c9c0d72b725e79d51 tests: split test-shelve.t in two test-shelve.t dominated run time for all shelve tests. Before: # Ran 9 tests, 1 skipped, 0 failed. real 0m43.568s user 2m15.822s sys 0m40.857s After: # Ran 11 tests, 1 skipped, 0 failed. real 0m24.574s user 2m21.354s sys 0m40.435s Differential Revision: https://phab.mercurial-scm.org/D5388 diff -r 74e3df766052 -r 1b836cee2d91 tests/test-shelve.t --- a/tests/test-shelve.t Tue Dec 04 22:16:13 2018 -0800 +++ b/tests/test-shelve.t Wed Dec 05 14:46:09 2018 -0800 @@ -668,269 +668,8 @@ $ hg bookmark \* test (4|13):33f7f61e6c5e (re) -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 5c4c67fb7dce - 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 6c103be8f4e4 --config extensions.rebase= - rebasing 2:323bfa07f744 "xyz"( \(tip\))? (re) - merging x - saved backup bundle to \$TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-(78114325|7ae538ef)-rebase.hg (re) - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - $ 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 3903775176ed - $ 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 0e067c57feba - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - $ 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 3903775176ed - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - $ hg status - A d - -test bug 4073 we need to enable obsolete markers for it - - $ cat >> $HGRCPATH << EOF - > [experimental] - > evolution.createmarkers=True - > EOF - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg debugobsolete `hg log -r 0e067c57feba -T '{node}'` - obsoleted 1 changesets - $ 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 -#if repobundlerepo - $ hg log -G --template '{rev} {desc|firstline} {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()' --hidden - o [48] changes to: commit stuff shelve@localhost (re) - | - ~ -#endif - $ hg log -G --template '{rev} {desc|firstline} {author}' - @ [37] commit stuff test (re) - | - | 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 - merging f - warning: conflicts while merging f! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - -#if phasebased - $ hg log -G --template '{rev} {desc|firstline} {author} {date|isodate}' - @ 9 pending changes temporary commit shelve@localhost 2004-01-10 13:37 +0000 - | - | @ 8 changes to: commit stuff shelve@localhost 1970-01-01 00:00 +0000 - |/ - o 7 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 - -#endif - -#if stripbased - $ 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 - -#endif - - $ hg st - M f - ? f.orig - $ cat f - <<<<<<< shelve: d44eae5c3d33 - shelve: pending changes temporary commit - g - ======= - f - >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff - $ cat f.orig - g - $ hg unshelve --abort -t false - tool option will be ignored - 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 - $ 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 - 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 - <<<<<<< shelve: 6b563750f973 - test: intermediate other change - g - ======= - f - >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff - $ cat f.orig - g - $ hg unshelve --abort - 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 2e69b451d1ea 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (leaving bookmark test) @@ -1143,21 +882,6 @@ $ cd .. -you shouldn't be able to ask for the patch/stats of the most recent shelve if -there are no shelves - - $ hg init noshelves - $ cd noshelves - - $ hg shelve --patch - abort: there are no shelves to show - [255] - $ hg shelve --stat - abort: there are no shelves to show - [255] - - $ cd .. - Shelve from general delta repo uses bundle2 on disk -------------------------------------------------- @@ -1327,43 +1051,6 @@ $ cd .. -test .orig files go where the user wants them to ---------------------------------------------------------------- - $ 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 --config 'ui.origbackuppath=.hg/origbackups' - warning: conflicts while merging root! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ ls .hg/origbackups - root - $ rm -rf .hg/origbackups - -test Abort unshelve always gets user out of the unshelved state ---------------------------------------------------------------- - -with a corrupted shelve state file - $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate - $ mv ../corrupt-shelvedstate .hg/shelvestate - $ hg unshelve --abort 2>&1 | grep 'aborted' - unshelve of 'default' aborted - $ hg summary - parent: 0:ae8c668541e8 tip - root - branch: default - commit: 1 modified - update: (current) - phases: 1 draft - $ hg up -C . - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - - $ cd .. - Keep active bookmark while (un)shelving even on shared repo (issue4940) ----------------------------------------------------------------------- @@ -1400,505 +1087,3 @@ test (4|13):33f7f61e6c5e (re) $ cd .. - -Shelve and unshelve unknown files. For the purposes of unshelve, a shelved -unknown file is the same as a shelved added file, except that it will be in -unknown state after unshelve if and only if it was either absent or unknown -before the unshelve operation. - - $ hg init unknowns - $ cd unknowns - -The simplest case is if I simply have an unknown file that I shelve and unshelve - - $ echo unknown > unknown - $ hg status - ? unknown - $ hg shelve --unknown - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg status - $ hg unshelve - unshelving change 'default' - $ hg status - ? unknown - $ rm unknown - -If I shelve, add the file, and unshelve, does it stay added? - - $ echo unknown > unknown - $ hg shelve -u - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg status - $ touch unknown - $ hg add unknown - $ hg status - A unknown - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - merging unknown - $ hg status - A unknown - $ hg forget unknown - $ rm unknown - -And if I shelve, commit, then unshelve, does it become modified? - - $ echo unknown > unknown - $ hg shelve -u - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg status - $ touch unknown - $ hg add unknown - $ hg commit -qm "Add unknown" - $ hg status - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - merging unknown - $ hg status - M unknown - $ hg remove --force unknown - $ hg commit -qm "Remove unknown" - - $ cd .. - -We expects that non-bare shelve keeps newly created branch in -working directory. - - $ hg init shelve-preserve-new-branch - $ cd shelve-preserve-new-branch - $ echo "a" >> a - $ hg add a - $ echo "b" >> b - $ hg add b - $ hg commit -m "ab" - $ echo "aa" >> a - $ echo "bb" >> b - $ hg branch new-branch - marked working directory as branch new-branch - (branches are permanent and global, did you want a bookmark?) - $ hg status - M a - M b - $ hg branch - new-branch - $ hg shelve a - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg branch - new-branch - $ hg status - M b - $ touch "c" >> c - $ hg add c - $ hg status - M b - A c - $ hg shelve --exclude c - shelved as default-01 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg branch - new-branch - $ hg status - A c - $ hg shelve --include c - shelved as default-02 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg branch - new-branch - $ hg status - $ echo "d" >> d - $ hg add d - $ hg status - A d - -We expect that bare-shelve will not keep branch in current working directory. - - $ hg shelve - shelved as default-03 - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg branch - default - $ cd .. - -When i shelve commit on newly created branch i expect -that after unshelve newly created branch will be preserved. - - $ hg init shelve_on_new_branch_simple - $ cd shelve_on_new_branch_simple - $ echo "aaa" >> a - $ hg commit -A -m "a" - adding a - $ hg branch - default - $ hg branch test - marked working directory as branch test - (branches are permanent and global, did you want a bookmark?) - $ echo "bbb" >> a - $ hg status - M a - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg branch - default - $ echo "bbb" >> b - $ hg status - ? b - $ hg unshelve - unshelving change 'default' - marked working directory as branch test - $ hg status - M a - ? b - $ hg branch - test - $ cd .. - -When i shelve commit on newly created branch, make -some changes, unshelve it and running into merge -conflicts i expect that after fixing them and -running unshelve --continue newly created branch -will be preserved. - - $ hg init shelve_on_new_branch_conflict - $ cd shelve_on_new_branch_conflict - $ echo "aaa" >> a - $ hg commit -A -m "a" - adding a - $ hg branch - default - $ hg branch test - marked working directory as branch test - (branches are permanent and global, did you want a bookmark?) - $ echo "bbb" >> a - $ hg status - M a - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg branch - default - $ echo "ccc" >> a - $ hg status - M a - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ echo "aaabbbccc" > a - $ rm a.orig - $ hg resolve --mark a - (no more unresolved files) - continue: hg unshelve --continue - $ hg unshelve --continue - marked working directory as branch test - unshelve of 'default' complete - $ cat a - aaabbbccc - $ hg status - M a - $ hg branch - test - $ hg commit -m "test-commit" - -When i shelve on test branch, update to default branch -and unshelve i expect that it will not preserve previous -test branch. - - $ echo "xxx" > b - $ hg add b - $ hg shelve - shelved as test - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ hg update -r 7049e48789d7 - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg unshelve - unshelving change 'test' - rebasing shelved changes - $ hg status - A b - $ hg branch - default - $ cd .. - -When i unshelve resulting in merge conflicts and makes saved -file shelvedstate looks like in previous versions in -mercurial(without restore branch information in 7th line) i -expect that after resolving conflicts and successfully -running 'shelve --continue' the branch information won't be -restored and branch will be unchanged. - -shelve on new branch, conflict with previous shelvedstate - - $ hg init conflict - $ cd conflict - $ echo "aaa" >> a - $ hg commit -A -m "a" - adding a - $ hg branch - default - $ hg branch test - marked working directory as branch test - (branches are permanent and global, did you want a bookmark?) - $ echo "bbb" >> a - $ hg status - M a - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg branch - default - $ echo "ccc" >> a - $ hg status - M a - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - -Removing restore branch information from shelvedstate file(making it looks like -in previous versions) and running unshelve --continue - - $ cp .hg/shelvedstate .hg/shelvedstate_old - $ cat .hg/shelvedstate_old | grep -v 'branchtorestore' > .hg/shelvedstate - - $ echo "aaabbbccc" > a - $ rm a.orig - $ hg resolve --mark a - (no more unresolved files) - continue: hg unshelve --continue - $ hg unshelve --continue - unshelve of 'default' complete - $ cat a - aaabbbccc - $ hg status - M a - $ hg branch - default - $ cd .. - -On non bare shelve the branch information shouldn't be restored - - $ hg init bare_shelve_on_new_branch - $ cd bare_shelve_on_new_branch - $ echo "aaa" >> a - $ hg commit -A -m "a" - adding a - $ hg branch - default - $ hg branch test - marked working directory as branch test - (branches are permanent and global, did you want a bookmark?) - $ echo "bbb" >> a - $ hg status - M a - $ hg shelve a - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ hg branch - test - $ hg branch default - marked working directory as branch default - (branches are permanent and global, did you want a bookmark?) - $ echo "bbb" >> b - $ hg status - ? b - $ hg unshelve - unshelving change 'default' - $ hg status - M a - ? b - $ hg branch - default - $ cd .. - -Prepare unshelve with a corrupted shelvedstate - $ hg init r1 && cd r1 - $ echo text1 > file && hg add file - $ hg shelve - shelved as default - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo text2 > file && hg ci -Am text1 - adding file - $ hg unshelve - unshelving change 'default' - rebasing shelved changes - merging file - warning: conflicts while merging file! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ echo somethingsomething > .hg/shelvedstate - -Unshelve --continue fails with appropriate message if shelvedstate is corrupted - $ hg unshelve --continue - abort: corrupted shelved state file - (please run hg unshelve --abort to abort unshelve operation) - [255] - -Unshelve --abort works with a corrupted shelvedstate - $ hg unshelve --abort - could not read shelved state file, your working copy may be in an unexpected state - please update to some commit - -Unshelve --abort fails with appropriate message if there's no unshelve in -progress - $ hg unshelve --abort - abort: no unshelve in progress - [255] - $ cd .. - -Unshelve respects --keep even if user intervention is needed - $ hg init unshelvekeep && cd unshelvekeep - $ echo 1 > file && hg ci -Am 1 - adding file - $ echo 2 >> file - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo 3 >> file && hg ci -Am 13 - $ hg shelve --list - default (*s ago) * changes to: 1 (glob) - $ hg unshelve --keep - unshelving change 'default' - rebasing shelved changes - merging file - warning: conflicts while merging file! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ hg resolve --mark file - (no more unresolved files) - continue: hg unshelve --continue - $ hg unshelve --continue - unshelve of 'default' complete - $ hg shelve --list - default (*s ago) * changes to: 1 (glob) - $ cd .. - -Unshelving when there are deleted files does not crash (issue4176) - $ hg init unshelve-deleted-file && cd unshelve-deleted-file - $ echo a > a && echo b > b && hg ci -Am ab - adding a - adding b - $ echo aa > a && hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ rm b - $ hg st - ! b - $ hg unshelve - unshelving change 'default' - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ rm a && echo b > b - $ hg st - ! a - $ hg unshelve - unshelving change 'default' - abort: shelved change touches missing files - (run hg status to see which files are missing) - [255] - $ hg st - ! a - $ cd .. - -New versions of Mercurial know how to read onld shelvedstate files - $ hg init oldshelvedstate - $ cd oldshelvedstate - $ echo root > root && hg ci -Am root - adding root - $ echo 1 > a - $ hg add a - $ hg shelve --name ashelve - shelved as ashelve - 0 files updated, 0 files merged, 1 files removed, 0 files unresolved - $ echo 2 > a - $ hg ci -Am a - adding a - $ hg unshelve - unshelving change 'ashelve' - rebasing shelved changes - merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] -putting v1 shelvedstate file in place of a created v2 - $ cat << EOF > .hg/shelvedstate - > 1 - > ashelve - > 8b058dae057a5a78f393f4535d9e363dd5efac9d - > 8b058dae057a5a78f393f4535d9e363dd5efac9d - > 8b058dae057a5a78f393f4535d9e363dd5efac9d f543b27db2cdb41737e2e0008dc524c471da1446 - > f543b27db2cdb41737e2e0008dc524c471da1446 - > - > nokeep - > :no-active-bookmark - > EOF - $ echo 1 > a - $ hg resolve --mark a - (no more unresolved files) - continue: hg unshelve --continue -mercurial does not crash - $ hg unshelve --continue - unshelve of 'ashelve' complete - -#if phasebased - -Unshelve with some metadata file missing ----------------------------------------- - - $ hg shelve - shelved as default - 1 files updated, 0 files merged, 0 files removed, 0 files unresolved - $ echo 3 > a - -Test with the `.shelve` missing, but the changeset still in the repo (non-natural case) - - $ rm .hg/shelved/default.shelve - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ hg unshelve --abort - unshelve of 'default' aborted - -Unshelve without .shelve metadata (can happen when upgrading a repository with old shelve) - - $ cat .hg/shelved/default.shelve - node=82e0cb9893247d12667017593ce1e5655860f1ac - $ hg strip --hidden --rev 82e0cb989324 --no-backup - $ rm .hg/shelved/default.shelve - $ hg unshelve - unshelving change 'default' - temporarily committing pending changes (restore with 'hg unshelve --abort') - rebasing shelved changes - merging a - warning: conflicts while merging a! (edit, then use 'hg resolve --mark') - unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') - [1] - $ cat .hg/shelved/default.shelve - node=82e0cb9893247d12667017593ce1e5655860f1ac - $ hg unshelve --abort - unshelve of 'default' aborted - -#endif - - $ cd .. diff -r 74e3df766052 -r 1b836cee2d91 tests/test-shelve2.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-shelve2.t Wed Dec 05 14:46:09 2018 -0800 @@ -0,0 +1,835 @@ +#testcases stripbased phasebased + + $ cat <> $HGRCPATH + > [extensions] + > mq = + > shelve = + > [defaults] + > diff = --nodates --git + > qnew = --date '0 0' + > [shelve] + > maxbackups = 2 + > EOF + +#if phasebased + + $ cat <> $HGRCPATH + > [format] + > internal-phase = yes + > EOF + +#endif + +shelve should leave dirstate clean (issue4055) + + $ 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 5c4c67fb7dce + 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 6c103be8f4e4 --config extensions.rebase= + rebasing 2:323bfa07f744 "xyz"( \(tip\))? (re) + merging x + saved backup bundle to \$TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-(78114325|7ae538ef)-rebase.hg (re) + $ hg unshelve + unshelving change 'default' + rebasing shelved changes + $ 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 3903775176ed + $ 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 0e067c57feba + $ hg unshelve + unshelving change 'default' + rebasing shelved changes + $ 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 3903775176ed + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg unshelve + unshelving change 'default' + rebasing shelved changes + $ hg status + A d + +test bug 4073 we need to enable obsolete markers for it + + $ cat >> $HGRCPATH << EOF + > [experimental] + > evolution.createmarkers=True + > EOF + $ hg shelve + shelved as default + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg debugobsolete `hg log -r 0e067c57feba -T '{node}'` + obsoleted 1 changesets + $ 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 +#if repobundlerepo + $ hg log -G --template '{rev} {desc|firstline} {author}' -R bundle://.hg/shelved/default.hg -r 'bundle()' --hidden + o [48] changes to: commit stuff shelve@localhost (re) + | + ~ +#endif + $ hg log -G --template '{rev} {desc|firstline} {author}' + @ [37] commit stuff test (re) + | + | 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 + merging f + warning: conflicts while merging f! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + +#if phasebased + $ hg log -G --template '{rev} {desc|firstline} {author} {date|isodate}' + @ 9 pending changes temporary commit shelve@localhost 2004-01-10 13:37 +0000 + | + | @ 8 changes to: commit stuff shelve@localhost 1970-01-01 00:00 +0000 + |/ + o 7 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 + +#endif + +#if stripbased + $ 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 + +#endif + + $ hg st + M f + ? f.orig + $ cat f + <<<<<<< shelve: d44eae5c3d33 - shelve: pending changes temporary commit + g + ======= + f + >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff + $ cat f.orig + g + $ hg unshelve --abort -t false + tool option will be ignored + 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 + $ 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 + 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 + <<<<<<< shelve: 6b563750f973 - test: intermediate other change + g + ======= + f + >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff + $ cat f.orig + g + $ hg unshelve --abort + unshelve of 'default' aborted + $ hg st + ? f.orig + $ cat f.orig + g + $ hg shelve --delete default + $ cd .. + +you shouldn't be able to ask for the patch/stats of the most recent shelve if +there are no shelves + + $ hg init noshelves + $ cd noshelves + + $ hg shelve --patch + abort: there are no shelves to show + [255] + $ hg shelve --stat + abort: there are no shelves to show + [255] + + $ cd .. + +test .orig files go where the user wants them to +--------------------------------------------------------------- + $ 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 --config 'ui.origbackuppath=.hg/origbackups' + warning: conflicts while merging root! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + $ ls .hg/origbackups + root + $ rm -rf .hg/origbackups + +test Abort unshelve always gets user out of the unshelved state +--------------------------------------------------------------- + +with a corrupted shelve state file + $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate + $ mv ../corrupt-shelvedstate .hg/shelvestate + $ hg unshelve --abort 2>&1 | grep 'aborted' + unshelve of 'default' aborted + $ hg summary + parent: 0:ae8c668541e8 tip + root + branch: default + commit: 1 modified + update: (current) + phases: 1 draft + $ hg up -C . + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + + $ cd .. + +Shelve and unshelve unknown files. For the purposes of unshelve, a shelved +unknown file is the same as a shelved added file, except that it will be in +unknown state after unshelve if and only if it was either absent or unknown +before the unshelve operation. + + $ hg init unknowns + $ cd unknowns + +The simplest case is if I simply have an unknown file that I shelve and unshelve + + $ echo unknown > unknown + $ hg status + ? unknown + $ hg shelve --unknown + shelved as default + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg status + $ hg unshelve + unshelving change 'default' + $ hg status + ? unknown + $ rm unknown + +If I shelve, add the file, and unshelve, does it stay added? + + $ echo unknown > unknown + $ hg shelve -u + shelved as default + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg status + $ touch unknown + $ hg add unknown + $ hg status + A unknown + $ hg unshelve + unshelving change 'default' + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + merging unknown + $ hg status + A unknown + $ hg forget unknown + $ rm unknown + +And if I shelve, commit, then unshelve, does it become modified? + + $ echo unknown > unknown + $ hg shelve -u + shelved as default + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg status + $ touch unknown + $ hg add unknown + $ hg commit -qm "Add unknown" + $ hg status + $ hg unshelve + unshelving change 'default' + rebasing shelved changes + merging unknown + $ hg status + M unknown + $ hg remove --force unknown + $ hg commit -qm "Remove unknown" + + $ cd .. + +We expects that non-bare shelve keeps newly created branch in +working directory. + + $ hg init shelve-preserve-new-branch + $ cd shelve-preserve-new-branch + $ echo "a" >> a + $ hg add a + $ echo "b" >> b + $ hg add b + $ hg commit -m "ab" + $ echo "aa" >> a + $ echo "bb" >> b + $ hg branch new-branch + marked working directory as branch new-branch + (branches are permanent and global, did you want a bookmark?) + $ hg status + M a + M b + $ hg branch + new-branch + $ hg shelve a + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch + new-branch + $ hg status + M b + $ touch "c" >> c + $ hg add c + $ hg status + M b + A c + $ hg shelve --exclude c + shelved as default-01 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch + new-branch + $ hg status + A c + $ hg shelve --include c + shelved as default-02 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg branch + new-branch + $ hg status + $ echo "d" >> d + $ hg add d + $ hg status + A d + +We expect that bare-shelve will not keep branch in current working directory. + + $ hg shelve + shelved as default-03 + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg branch + default + $ cd .. + +When i shelve commit on newly created branch i expect +that after unshelve newly created branch will be preserved. + + $ hg init shelve_on_new_branch_simple + $ cd shelve_on_new_branch_simple + $ echo "aaa" >> a + $ hg commit -A -m "a" + adding a + $ hg branch + default + $ hg branch test + marked working directory as branch test + (branches are permanent and global, did you want a bookmark?) + $ echo "bbb" >> a + $ hg status + M a + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch + default + $ echo "bbb" >> b + $ hg status + ? b + $ hg unshelve + unshelving change 'default' + marked working directory as branch test + $ hg status + M a + ? b + $ hg branch + test + $ cd .. + +When i shelve commit on newly created branch, make +some changes, unshelve it and running into merge +conflicts i expect that after fixing them and +running unshelve --continue newly created branch +will be preserved. + + $ hg init shelve_on_new_branch_conflict + $ cd shelve_on_new_branch_conflict + $ echo "aaa" >> a + $ hg commit -A -m "a" + adding a + $ hg branch + default + $ hg branch test + marked working directory as branch test + (branches are permanent and global, did you want a bookmark?) + $ echo "bbb" >> a + $ hg status + M a + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch + default + $ echo "ccc" >> a + $ hg status + M a + $ hg unshelve + unshelving change 'default' + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + $ echo "aaabbbccc" > a + $ rm a.orig + $ hg resolve --mark a + (no more unresolved files) + continue: hg unshelve --continue + $ hg unshelve --continue + marked working directory as branch test + unshelve of 'default' complete + $ cat a + aaabbbccc + $ hg status + M a + $ hg branch + test + $ hg commit -m "test-commit" + +When i shelve on test branch, update to default branch +and unshelve i expect that it will not preserve previous +test branch. + + $ echo "xxx" > b + $ hg add b + $ hg shelve + shelved as test + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg update -r 7049e48789d7 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg unshelve + unshelving change 'test' + rebasing shelved changes + $ hg status + A b + $ hg branch + default + $ cd .. + +When i unshelve resulting in merge conflicts and makes saved +file shelvedstate looks like in previous versions in +mercurial(without restore branch information in 7th line) i +expect that after resolving conflicts and successfully +running 'shelve --continue' the branch information won't be +restored and branch will be unchanged. + +shelve on new branch, conflict with previous shelvedstate + + $ hg init conflict + $ cd conflict + $ echo "aaa" >> a + $ hg commit -A -m "a" + adding a + $ hg branch + default + $ hg branch test + marked working directory as branch test + (branches are permanent and global, did you want a bookmark?) + $ echo "bbb" >> a + $ hg status + M a + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch + default + $ echo "ccc" >> a + $ hg status + M a + $ hg unshelve + unshelving change 'default' + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + +Removing restore branch information from shelvedstate file(making it looks like +in previous versions) and running unshelve --continue + + $ cp .hg/shelvedstate .hg/shelvedstate_old + $ cat .hg/shelvedstate_old | grep -v 'branchtorestore' > .hg/shelvedstate + + $ echo "aaabbbccc" > a + $ rm a.orig + $ hg resolve --mark a + (no more unresolved files) + continue: hg unshelve --continue + $ hg unshelve --continue + unshelve of 'default' complete + $ cat a + aaabbbccc + $ hg status + M a + $ hg branch + default + $ cd .. + +On non bare shelve the branch information shouldn't be restored + + $ hg init bare_shelve_on_new_branch + $ cd bare_shelve_on_new_branch + $ echo "aaa" >> a + $ hg commit -A -m "a" + adding a + $ hg branch + default + $ hg branch test + marked working directory as branch test + (branches are permanent and global, did you want a bookmark?) + $ echo "bbb" >> a + $ hg status + M a + $ hg shelve a + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg branch + test + $ hg branch default + marked working directory as branch default + (branches are permanent and global, did you want a bookmark?) + $ echo "bbb" >> b + $ hg status + ? b + $ hg unshelve + unshelving change 'default' + $ hg status + M a + ? b + $ hg branch + default + $ cd .. + +Prepare unshelve with a corrupted shelvedstate + $ hg init r1 && cd r1 + $ echo text1 > file && hg add file + $ hg shelve + shelved as default + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo text2 > file && hg ci -Am text1 + adding file + $ hg unshelve + unshelving change 'default' + rebasing shelved changes + merging file + warning: conflicts while merging file! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + $ echo somethingsomething > .hg/shelvedstate + +Unshelve --continue fails with appropriate message if shelvedstate is corrupted + $ hg unshelve --continue + abort: corrupted shelved state file + (please run hg unshelve --abort to abort unshelve operation) + [255] + +Unshelve --abort works with a corrupted shelvedstate + $ hg unshelve --abort + could not read shelved state file, your working copy may be in an unexpected state + please update to some commit + +Unshelve --abort fails with appropriate message if there's no unshelve in +progress + $ hg unshelve --abort + abort: no unshelve in progress + [255] + $ cd .. + +Unshelve respects --keep even if user intervention is needed + $ hg init unshelvekeep && cd unshelvekeep + $ echo 1 > file && hg ci -Am 1 + adding file + $ echo 2 >> file + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo 3 >> file && hg ci -Am 13 + $ hg shelve --list + default (*s ago) * changes to: 1 (glob) + $ hg unshelve --keep + unshelving change 'default' + rebasing shelved changes + merging file + warning: conflicts while merging file! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + $ hg resolve --mark file + (no more unresolved files) + continue: hg unshelve --continue + $ hg unshelve --continue + unshelve of 'default' complete + $ hg shelve --list + default (*s ago) * changes to: 1 (glob) + $ cd .. + +Unshelving when there are deleted files does not crash (issue4176) + $ hg init unshelve-deleted-file && cd unshelve-deleted-file + $ echo a > a && echo b > b && hg ci -Am ab + adding a + adding b + $ echo aa > a && hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ rm b + $ hg st + ! b + $ hg unshelve + unshelving change 'default' + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ rm a && echo b > b + $ hg st + ! a + $ hg unshelve + unshelving change 'default' + abort: shelved change touches missing files + (run hg status to see which files are missing) + [255] + $ hg st + ! a + $ cd .. + +New versions of Mercurial know how to read onld shelvedstate files + $ hg init oldshelvedstate + $ cd oldshelvedstate + $ echo root > root && hg ci -Am root + adding root + $ echo 1 > a + $ hg add a + $ hg shelve --name ashelve + shelved as ashelve + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo 2 > a + $ hg ci -Am a + adding a + $ hg unshelve + unshelving change 'ashelve' + rebasing shelved changes + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] +putting v1 shelvedstate file in place of a created v2 + $ cat << EOF > .hg/shelvedstate + > 1 + > ashelve + > 8b058dae057a5a78f393f4535d9e363dd5efac9d + > 8b058dae057a5a78f393f4535d9e363dd5efac9d + > 8b058dae057a5a78f393f4535d9e363dd5efac9d f543b27db2cdb41737e2e0008dc524c471da1446 + > f543b27db2cdb41737e2e0008dc524c471da1446 + > + > nokeep + > :no-active-bookmark + > EOF + $ echo 1 > a + $ hg resolve --mark a + (no more unresolved files) + continue: hg unshelve --continue +mercurial does not crash + $ hg unshelve --continue + unshelve of 'ashelve' complete + +#if phasebased + +Unshelve with some metadata file missing +---------------------------------------- + + $ hg shelve + shelved as default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo 3 > a + +Test with the `.shelve` missing, but the changeset still in the repo (non-natural case) + + $ rm .hg/shelved/default.shelve + $ hg unshelve + unshelving change 'default' + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + $ hg unshelve --abort + unshelve of 'default' aborted + +Unshelve without .shelve metadata (can happen when upgrading a repository with old shelve) + + $ cat .hg/shelved/default.shelve + node=82e0cb9893247d12667017593ce1e5655860f1ac + $ hg strip --hidden --rev 82e0cb989324 --no-backup + $ rm .hg/shelved/default.shelve + $ hg unshelve + unshelving change 'default' + temporarily committing pending changes (restore with 'hg unshelve --abort') + rebasing shelved changes + merging a + warning: conflicts while merging a! (edit, then use 'hg resolve --mark') + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') + [1] + $ cat .hg/shelved/default.shelve + node=82e0cb9893247d12667017593ce1e5655860f1ac + $ hg unshelve --abort + unshelve of 'default' aborted + +#endif + + $ cd ..