test-shelve2.t
997 lines
| 24.6 KiB
| text/troff
|
Tads3Lexer
/ tests / test-shelve2.t
|
r40887 | #testcases stripbased phasebased | ||
|
r42802 | #testcases abortflag abortcommand | ||
|
r42833 | #testcases continueflag continuecommand | ||
|
r40887 | |||
$ cat <<EOF >> $HGRCPATH | ||||
> [extensions] | ||||
> mq = | ||||
> [defaults] | ||||
> diff = --nodates --git | ||||
> qnew = --date '0 0' | ||||
> [shelve] | ||||
> maxbackups = 2 | ||||
> EOF | ||||
#if phasebased | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [format] | ||||
> internal-phase = yes | ||||
> EOF | ||||
#endif | ||||
|
r42802 | #if abortflag | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [alias] | ||||
> abort = unshelve --abort | ||||
> EOF | ||||
#endif | ||||
|
r42833 | #if continueflag | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [alias] | ||||
> continue = unshelve --continue | ||||
> EOF | ||||
#endif | ||||
|
r40887 | 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= | ||||
|
r46356 | rebasing 2:323bfa07f744( tip)? "xyz" (re) | ||
|
r40887 | 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}'` | ||||
r43163 | 1 new obsolescence markers | |||
|
r40887 | 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 | ||||
|
r41734 | $ rm e.orig | ||
|
r40887 | |||
|
r41734 | restores backup of unknown file to right directory | ||
$ hg shelve | ||||
shelved as default | ||||
0 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||||
$ echo z > e | ||||
$ mkdir dir | ||||
$ hg unshelve --cwd dir | ||||
unshelving change 'default' | ||||
$ rmdir dir | ||||
$ cat e | ||||
|
r41736 | e | ||
$ cat e.orig | ||||
|
r41734 | z | ||
|
r40887 | |||
unshelve and conflicts with tracked and untracked files | ||||
preparing: | ||||
|
r41734 | $ rm -f *.orig | ||
|
r40887 | $ 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') | ||||
|
r46430 | [240] | ||
|
r40887 | |||
#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 | ||||
|
r44856 | <<<<<<< working-copy: d44eae5c3d33 - shelve: pending changes temporary commit | ||
|
r40887 | g | ||
======= | ||||
f | ||||
|
r44856 | >>>>>>> shelve: aef214a5229c - shelve: changes to: commit stuff | ||
|
r40887 | $ 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') | ||||
|
r46430 | [240] | ||
|
r40887 | $ hg st | ||
M f | ||||
? f.orig | ||||
$ cat f | ||||
|
r44856 | <<<<<<< working-copy: 6b563750f973 - test: intermediate other change | ||
|
r40887 | g | ||
======= | ||||
f | ||||
|
r44856 | >>>>>>> shelve: aef214a5229c - shelve: changes to: commit stuff | ||
|
r40887 | $ cat f.orig | ||
g | ||||
|
r42802 | |||
#if abortcommand | ||||
when in dry-run mode | ||||
$ hg abort --dry-run | ||||
unshelve in progress, will be aborted | ||||
#endif | ||||
$ hg abort | ||||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r40887 | $ 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') | ||||
|
r46430 | [240] | ||
|
r40887 | $ echo "aaabbbccc" > a | ||
$ rm a.orig | ||||
$ hg resolve --mark a | ||||
(no more unresolved files) | ||||
continue: hg unshelve --continue | ||||
|
r42833 | $ hg continue | ||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r40887 | |||
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 | ||||
|
r42833 | |||
#if continuecommand | ||||
$ hg continue --dry-run | ||||
unshelve in progress, will be resumed | ||||
#endif | ||||
$ hg continue | ||||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r40887 | $ echo somethingsomething > .hg/shelvedstate | ||
Unshelve --continue fails with appropriate message if shelvedstate is corrupted | ||||
|
r42833 | $ hg continue | ||
|
r40887 | abort: corrupted shelved state file | ||
(please run hg unshelve --abort to abort unshelve operation) | ||||
[255] | ||||
Unshelve --abort works with a corrupted shelvedstate | ||||
|
r42802 | $ hg abort | ||
|
r42801 | abort: could not read shelved state file, your working copy may be in an unexpected state | ||
|
r40887 | please update to some commit | ||
|
r42801 | |||
[255] | ||||
|
r40887 | |||
Unshelve --abort fails with appropriate message if there's no unshelve in | ||||
progress | ||||
|
r42803 | |||
#if abortflag | ||||
$ hg unshelve --abort | ||||
abort: no unshelve in progress | ||||
|
r46444 | [20] | ||
|
r42803 | #else | ||
|
r42802 | $ hg abort | ||
|
r42803 | aborting the merge, updating back to 9451eaa6eee3 | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
#endif | ||||
|
r40887 | $ cd .. | ||
|
r46894 | Test corrupt shelves (in .hg/shelved/, not .hg/shelvestate) | ||
$ hg init corrupt-shelves | ||||
$ cd corrupt-shelves | ||||
$ mkdir .hg/shelved | ||||
# A (corrupt) .patch file without a .hg file | ||||
$ touch .hg/shelved/junk1.patch | ||||
$ hg shelve -l | ||||
junk1 (* ago) (glob) | ||||
$ hg unshelve | ||||
unshelving change 'junk1' | ||||
|
r46897 | abort: $ENOENT$: '$TESTTMP/corrupt-shelves/.hg/shelved/junk1.hg' | ||
|
r46894 | [255] | ||
$ hg shelve -d junk1 | ||||
$ find .hg/shelve* | ||||
.hg/shelve-backup | ||||
.hg/shelve-backup/junk1.patch | ||||
.hg/shelved | ||||
# A .hg file without a .patch file | ||||
$ touch .hg/shelved/junk2.hg | ||||
$ hg shelve -l | ||||
$ hg unshelve | ||||
abort: no shelved changes to apply! | ||||
[255] | ||||
$ hg shelve -d junk2 | ||||
abort: shelved change 'junk2' not found | ||||
[255] | ||||
$ find .hg/shelve* | ||||
.hg/shelve-backup | ||||
.hg/shelve-backup/junk1.patch | ||||
.hg/shelved | ||||
|
r46896 | .hg/shelved/junk2.hg | ||
|
r46894 | |||
# A file with an unexpected extension | ||||
$ touch .hg/shelved/junk3 | ||||
$ hg shelve -l 2>&1 | grep ValueError | ||||
ValueError: not enough values to unpack (expected 2, got 1) | ||||
$ hg unshelve 2>&1 | grep ValueError | ||||
ValueError: not enough values to unpack (expected 2, got 1) | ||||
$ hg shelve -d junk3 | ||||
abort: shelved change 'junk3' not found | ||||
[255] | ||||
$ find .hg/shelve* | ||||
.hg/shelve-backup | ||||
.hg/shelve-backup/junk1.patch | ||||
.hg/shelved | ||||
.hg/shelved/junk3 | ||||
|
r46896 | .hg/shelved/junk2.hg | ||
|
r46894 | |||
$ cd .. | ||||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r40887 | $ hg resolve --mark file | ||
(no more unresolved files) | ||||
continue: hg unshelve --continue | ||||
|
r42833 | $ hg continue | ||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r40887 | 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 | ||||
|
r42833 | $ hg continue | ||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r42802 | $ hg abort | ||
|
r40887 | 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') | ||||
|
r46430 | [240] | ||
|
r40887 | $ cat .hg/shelved/default.shelve | ||
node=82e0cb9893247d12667017593ce1e5655860f1ac | ||||
|
r42802 | $ hg abort | ||
|
r40887 | unshelve of 'default' aborted | ||
#endif | ||||
$ cd .. | ||||
|
r42780 | |||
Block merge abort when unshelve in progress(issue6160) | ||||
------------------------------------------------------ | ||||
$ hg init a | ||||
$ cd a | ||||
$ echo foo > a ; hg commit -qAm "initial commit" | ||||
$ echo bar > a | ||||
$ hg shelve | ||||
shelved as default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo foobar > 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') | ||||
|
r46430 | [240] | ||
|
r42780 | |||
$ hg log --template '{desc|firstline} {author} {date|isodate} \n' -r . | ||||
pending changes temporary commit shelve@localhost 1970-01-01 00:00 +0000 | ||||
$ hg merge --abort | ||||
abort: cannot abort merge with unshelve in progress | ||||
(use 'hg unshelve --continue' or 'hg unshelve --abort') | ||||
|
r46444 | [20] | ||
|
r42780 | |||
$ hg unshelve --abort | ||||
unshelve of 'default' aborted | ||||
$ hg log -G --template '{desc|firstline} {author} {date|isodate} \n' -r . | ||||
@ initial commit test 1970-01-01 00:00 +0000 | ||||
$ cd .. | ||||
|
r44855 | |||
Demonstrate that the labels are correct in the merge conflict | ||||
------------------------------------------------------------- | ||||
$ hg init labels | ||||
$ cd labels | ||||
$ echo r0 > foo | ||||
$ hg ci -qAm r0 | ||||
$ echo "this will be shelved" >> foo | ||||
$ hg shelve -q | ||||
$ echo "this is in wdir, conflicts with shelve" >> foo | ||||
$ hg unshelve -q | ||||
warning: conflicts while merging foo! (edit, then use 'hg resolve --mark') | ||||
unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||||
|
r46430 | [240] | ||
|
r44855 | $ cat foo | ||
r0 | ||||
|
r44856 | <<<<<<< working-copy: 0b2fcf2a90e9 - shelve: pending changes temporary commit | ||
|
r44855 | this is in wdir, conflicts with shelve | ||
======= | ||||
this will be shelved | ||||
|
r44856 | >>>>>>> shelve: 9c072a2163db - shelve: changes to: r0 | ||
|
r44855 | $ cd .. | ||