test-shelve.t
484 lines
| 9.9 KiB
| text/troff
|
Tads3Lexer
/ tests / test-shelve.t
David Soria Parra
|
r19854 | $ echo "[extensions]" >> $HGRCPATH | ||
David Soria Parra
|
r19856 | $ echo "mq=" >> $HGRCPATH | ||
David Soria Parra
|
r19854 | $ echo "shelve=" >> $HGRCPATH | ||
$ echo "[defaults]" >> $HGRCPATH | ||||
$ echo "diff = --nodates --git" >> $HGRCPATH | ||||
David Soria Parra
|
r19856 | $ echo "qnew = --date '0 0'" >> $HGRCPATH | ||
David Soria Parra
|
r19854 | |||
$ hg init repo | ||||
$ cd repo | ||||
$ mkdir a b | ||||
$ echo a > a/a | ||||
$ echo b > b/b | ||||
$ echo c > c | ||||
$ echo d > d | ||||
$ echo x > x | ||||
$ hg addremove -q | ||||
shelving in an empty repo should be possible | ||||
$ hg shelve | ||||
shelved as default | ||||
0 files updated, 0 files merged, 5 files removed, 0 files unresolved | ||||
$ hg unshelve | ||||
unshelving change 'default' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 5 changes to 5 files | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg commit -q -m 'initial commit' | ||||
$ hg shelve | ||||
nothing changed | ||||
[1] | ||||
David Soria Parra
|
r19856 | create an mq patch - shelving should work fine with a patch applied | ||
David Soria Parra
|
r19854 | |||
$ echo n > n | ||||
$ hg add n | ||||
$ hg commit n -m second | ||||
David Soria Parra
|
r19856 | $ hg qnew second.patch | ||
David Soria Parra
|
r19854 | |||
shelve a change that we will delete later | ||||
$ echo a >> a/a | ||||
$ hg shelve | ||||
shelved as default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
set up some more complex changes to shelve | ||||
$ echo a >> a/a | ||||
$ hg mv b b.rename | ||||
moving b/b to b.rename/b (glob) | ||||
$ hg cp c c.copy | ||||
$ hg status -C | ||||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
prevent some foot-shooting | ||||
$ hg shelve -n foo/bar | ||||
abort: shelved change names may not contain slashes | ||||
[255] | ||||
$ hg shelve -n .baz | ||||
abort: shelved change names may not start with '.' | ||||
[255] | ||||
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 | ||||
$ hg status -C | ||||
ensure that our shelved changes exist | ||||
$ hg shelve -l | ||||
David Soria Parra
|
r19856 | default-01 (*) [mq]: second.patch (glob) | ||
default (*) [mq]: second.patch (glob) | ||||
David Soria Parra
|
r19854 | |||
$ hg shelve -l -p default | ||||
David Soria Parra
|
r19856 | default (*) [mq]: second.patch (glob) | ||
David Soria Parra
|
r19854 | |||
diff --git a/a/a b/a/a | ||||
--- a/a/a | ||||
+++ b/a/a | ||||
@@ -1,1 +1,2 @@ | ||||
a | ||||
+a | ||||
delete our older shelved change | ||||
$ hg shelve -d default | ||||
David Soria Parra
|
r19856 | $ hg qfinish -a -q | ||
David Soria Parra
|
r19854 | |||
local edits should prevent a shelved change from applying | ||||
$ echo e>>a/a | ||||
$ hg unshelve | ||||
unshelving change 'default-01' | ||||
the following shelved files have been modified: | ||||
a/a | ||||
you must commit, revert, or shelve your changes before you can proceed | ||||
abort: cannot unshelve due to local changes | ||||
[255] | ||||
$ hg revert -C a/a | ||||
apply it and make sure our state is as expected | ||||
$ hg unshelve | ||||
unshelving change 'default-01' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 3 changes to 8 files | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg status -C | ||||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
$ hg shelve -l | ||||
$ hg unshelve | ||||
abort: no shelved changes to apply! | ||||
[255] | ||||
$ hg unshelve foo | ||||
abort: shelved change 'foo' not found | ||||
[255] | ||||
named shelves, specific filenames, and "commit messages" should all work | ||||
$ hg status -C | ||||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
$ hg shelve -q -n wibble -m wat a | ||||
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 | ||||
David Soria Parra
|
r19855 | wibble (*) wat (glob) | ||
David Soria Parra
|
r19854 | a/a | 1 + | ||
1 files changed, 1 insertions(+), 0 deletions(-) | ||||
and now "a/a" should reappear | ||||
$ hg unshelve -q wibble | ||||
$ hg status -C | ||||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
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' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 3 changes to 8 files (+1 heads) | ||||
merging a/a | ||||
warning: conflicts during merge. | ||||
merging a/a incomplete! (edit conflicts, then use 'hg resolve --mark') | ||||
2 files updated, 0 files merged, 1 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||||
[1] | ||||
ensure that we have a merge with unresolved conflicts | ||||
$ hg heads -q | ||||
David Soria Parra
|
r19856 | 4:cebf2b8de087 | ||
3:2e69b451d1ea | ||||
David Soria Parra
|
r19854 | $ hg parents -q | ||
David Soria Parra
|
r19856 | 3:2e69b451d1ea | ||
4:cebf2b8de087 | ||||
David Soria Parra
|
r19854 | $ hg status | ||
M a/a | ||||
M b.rename/b | ||||
M c.copy | ||||
A foo/foo | ||||
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 | ||||
+<<<<<<< local | ||||
c | ||||
+======= | ||||
+a | ||||
+>>>>>>> other | ||||
diff --git a/b.rename/b b/b.rename/b | ||||
--- /dev/null | ||||
+++ b/b.rename/b | ||||
@@ -0,0 +1,1 @@ | ||||
+b | ||||
diff --git a/b/b b/b/b | ||||
deleted file mode 100644 | ||||
--- a/b/b | ||||
+++ /dev/null | ||||
@@ -1,1 +0,0 @@ | ||||
-b | ||||
diff --git a/c.copy b/c.copy | ||||
--- /dev/null | ||||
+++ b/c.copy | ||||
@@ -0,0 +1,1 @@ | ||||
+c | ||||
diff --git a/foo/foo b/foo/foo | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/foo/foo | ||||
@@ -0,0 +1,1 @@ | ||||
+foo | ||||
$ 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 | ||||
A foo/foo | ||||
R b/b | ||||
? a/a.orig | ||||
$ hg unshelve -a | ||||
unshelve of 'default' aborted | ||||
$ hg heads -q | ||||
David Soria Parra
|
r19856 | 3:2e69b451d1ea | ||
David Soria Parra
|
r19854 | $ hg parents | ||
David Soria Parra
|
r19856 | changeset: 3:2e69b451d1ea | ||
David Soria Parra
|
r19854 | 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 during merge. | ||||
merging a/a incomplete! (edit conflicts, 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 | ||||
$ hg unshelve -c | ||||
unshelve of 'default' complete | ||||
ensure the repo is as we hope | ||||
$ hg parents | ||||
David Soria Parra
|
r19856 | changeset: 3:2e69b451d1ea | ||
David Soria Parra
|
r19854 | tag: tip | ||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: second | ||||
$ hg heads -q | ||||
David Soria Parra
|
r19856 | 3:2e69b451d1ea | ||
David Soria Parra
|
r19854 | |||
$ hg status -C | ||||
M b.rename/b | ||||
b/b | ||||
M 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 | ||||
$ 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' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 6 files (+1 heads) | ||||
merging a/a | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
$ hg parents -q | ||||
Durham Goode
|
r19887 | 4:33f7f61e6c5e | ||
David Soria Parra
|
r19854 | $ 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 | ||||
David Soria Parra
|
r19855 | default (*) create conflict (glob) | ||
David Soria Parra
|
r19854 | $ hg unshelve --keep | ||
unshelving change 'default' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 7 files | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg shelve --list | ||||
David Soria Parra
|
r19855 | default (*) create conflict (glob) | ||
David Soria Parra
|
r19854 | $ hg shelve --cleanup | ||
$ hg shelve --list | ||||
David Soria Parra
|
r19874 | |||
test bookmarks | ||||
$ hg bookmark test | ||||
$ hg bookmark | ||||
Durham Goode
|
r19887 | * test 4:33f7f61e6c5e | ||
David Soria Parra
|
r19874 | $ hg shelve | ||
shelved as test | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg bookmark | ||||
Durham Goode
|
r19887 | * test 4:33f7f61e6c5e | ||
David Soria Parra
|
r19874 | $ hg unshelve | ||
unshelving change 'test' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 7 files | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg bookmark | ||||
Durham Goode
|
r19887 | * test 4:33f7f61e6c5e | ||
Sean Farley
|
r19885 | |||
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 (1s ago) create conflict | ||||
$ hg --config extensions.mq=! unshelve | ||||
unshelving change 'test' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 7 files | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Durham Goode
|
r19887 | |||
shelve should leave dirstate clean (issue 4055) | ||||
$ 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= | ||||
merging x | ||||
saved backup bundle to $TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-backup.hg (glob) | ||||
$ hg unshelve | ||||
unshelving change 'default' | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files (+1 heads) | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg status | ||||
M z | ||||
$ cd .. | ||||