test-shelve.t
1904 lines
| 46.0 KiB
| text/troff
|
Tads3Lexer
/ tests / test-shelve.t
|
r39555 | #testcases stripbased phasebased | ||
|
r23172 | $ cat <<EOF >> $HGRCPATH | ||
> [extensions] | ||||
> mq = | ||||
> shelve = | ||||
> [defaults] | ||||
> diff = --nodates --git | ||||
> qnew = --date '0 0' | ||||
|
r25713 | > [shelve] | ||
> maxbackups = 2 | ||||
|
r23172 | > EOF | ||
|
r19854 | |||
|
r39555 | #if phasebased | ||
$ cat <<EOF >> $HGRCPATH | ||||
> [format] | ||||
> internal-phase = yes | ||||
> EOF | ||||
#endif | ||||
|
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 | ||||
|
r24477 | shelve has a help message | ||
$ hg shelve -h | ||||
hg shelve [OPTION]... [FILE]... | ||||
save and set aside changes from the working directory | ||||
Shelving takes files that "hg status" reports as not clean, saves the | ||||
modifications to a bundle (a shelved change), and reverts the files so | ||||
that their state in the working directory becomes clean. | ||||
To restore these changes to the working directory, using "hg unshelve"; | ||||
this will work even if you switch to a different commit. | ||||
When no files are specified, "hg shelve" saves all not-clean files. If | ||||
specific files or directories are named, only changes to those files are | ||||
shelved. | ||||
|
r30419 | In bare shelve (when no files are specified, without interactive, include | ||
|
r28573 | and exclude option), shelving remembers information if the working | ||
directory was on newly created branch, in other words working directory | ||||
was on different branch than its first parent. In this situation | ||||
unshelving restores branch information to the working directory. | ||||
|
r24477 | Each shelved change has a name that makes it easier to find later. The | ||
name of a shelved change defaults to being based on the active bookmark, | ||||
or if there is no active bookmark, the current named branch. To specify a | ||||
different name, use "--name". | ||||
To see a list of existing shelved changes, use the "--list" option. For | ||||
each shelved change, this will print its name, age, and description; use " | ||||
--patch" or "--stat" for more details. | ||||
To delete specific shelved changes, use "--delete". To delete all shelved | ||||
changes, use "--cleanup". | ||||
|
r29974 | (use 'hg help -e shelve' to show help for the shelve extension) | ||
|
r24477 | |||
options ([+] can be repeated): | ||||
|
r30152 | -A --addremove mark new/missing files as added/removed before | ||
|
r24477 | shelving | ||
|
r30152 | -u --unknown store unknown files in the shelve | ||
--cleanup delete all shelved changes | ||||
|
r24477 | --date DATE shelve with the specified commit date | ||
|
r30152 | -d --delete delete the named shelved change(s) | ||
-e --edit invoke editor on commit messages | ||||
-l --list list current shelves | ||||
|
r24477 | -m --message TEXT use text as shelve message | ||
-n --name NAME use the given name for the shelved commit | ||||
|
r38736 | -p --patch output patches for changes (provide the names of the | ||
shelved changes as positional arguments) | ||||
|
r30152 | -i --interactive interactive mode, only works while creating a shelve | ||
|
r38736 | --stat output diffstat-style summary of changes (provide | ||
the names of the shelved changes as positional | ||||
arguments) | ||||
|
r24477 | -I --include PATTERN [+] include names matching the given patterns | ||
-X --exclude PATTERN [+] exclude names matching the given patterns | ||||
|
r30152 | --mq operate on patch repository | ||
|
r24477 | |||
(some details hidden, use --verbose to show complete help) | ||||
|
r19854 | shelving in an empty repo should be possible | ||
|
r21852 | (this tests also that editor is not invoked, if '--edit' is not | ||
specified) | ||||
|
r19854 | |||
|
r21852 | $ HGEDITOR=cat hg shelve | ||
|
r19854 | shelved as default | ||
0 files updated, 0 files merged, 5 files removed, 0 files unresolved | ||||
$ hg unshelve | ||||
unshelving change 'default' | ||||
$ hg commit -q -m 'initial commit' | ||||
$ hg shelve | ||||
nothing changed | ||||
[1] | ||||
|
r25712 | make sure shelve files were backed up | ||
$ ls .hg/shelve-backup | ||||
default.hg | ||||
default.patch | ||||
|
r39408 | default.shelve | ||
|
r25712 | |||
|
r30670 | checks to make sure we dont create a directory or | ||
hidden file while choosing a new shelve name | ||||
when we are given a name | ||||
$ hg shelve -n foo/bar | ||||
|
r30671 | abort: shelved change names can not contain slashes | ||
|
r30670 | [255] | ||
$ hg shelve -n .baz | ||||
|
r30671 | abort: shelved change names can not start with '.' | ||
|
r30670 | [255] | ||
$ hg shelve -n foo\\bar | ||||
|
r30671 | abort: shelved change names can not contain slashes | ||
|
r30670 | [255] | ||
when shelve has to choose itself | ||||
$ hg branch x/y -q | ||||
$ hg commit -q -m "Branch commit 0" | ||||
$ hg shelve | ||||
nothing changed | ||||
[1] | ||||
$ hg branch .x -q | ||||
$ hg commit -q -m "Branch commit 1" | ||||
$ hg shelve | ||||
|
r30671 | nothing changed | ||
[1] | ||||
|
r30670 | $ hg branch x\\y -q | ||
$ hg commit -q -m "Branch commit 2" | ||||
$ hg shelve | ||||
|
r30671 | nothing changed | ||
[1] | ||||
|
r30670 | |||
cleaning the branches made for name checking tests | ||||
$ hg up default -q | ||||
|
r38356 | $ hg strip e9177275307e+6a6d231f43d+882bae7c62c2 -q | ||
|
r30670 | |||
|
r19856 | create an mq patch - shelving should work fine with a patch applied | ||
|
r19854 | |||
$ echo n > n | ||||
$ hg add n | ||||
$ hg commit n -m second | ||||
|
r19856 | $ hg qnew second.patch | ||
|
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 | ||||
|
r35394 | moving b/b to b.rename/b | ||
|
r19854 | $ hg cp c c.copy | ||
$ hg status -C | ||||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
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 | ||||
|
r27092 | default-01 (*)* changes to: [mq]: second.patch (glob) | ||
default (*)* changes to: [mq]: second.patch (glob) | ||||
|
r19854 | |||
$ hg shelve -l -p default | ||||
|
r27092 | default (*)* changes to: [mq]: second.patch (glob) | ||
|
r19854 | |||
diff --git a/a/a b/a/a | ||||
--- a/a/a | ||||
+++ b/a/a | ||||
@@ -1,1 +1,2 @@ | ||||
a | ||||
+a | ||||
|
r21715 | $ hg shelve --list --addremove | ||
abort: options '--list' and '--addremove' may not be used together | ||||
[255] | ||||
|
r19854 | delete our older shelved change | ||
$ hg shelve -d default | ||||
|
r19856 | $ hg qfinish -a -q | ||
|
r19854 | |||
|
r25712 | ensure shelve backups aren't overwritten | ||
$ ls .hg/shelve-backup/ | ||||
default-1.hg | ||||
default-1.patch | ||||
|
r39408 | default-1.shelve | ||
|
r25712 | default.hg | ||
default.patch | ||||
|
r39408 | default.shelve | ||
|
r25712 | |||
|
r19961 | local edits should not prevent a shelved change from applying | ||
|
r19854 | |||
|
r19961 | $ printf "z\na\n" > a/a | ||
$ hg unshelve --keep | ||||
|
r19854 | unshelving change 'default-01' | ||
|
r20413 | temporarily committing pending changes (restore with 'hg unshelve --abort') | ||
rebasing shelved changes | ||||
|
r19961 | merging a/a | ||
|
r19854 | |||
|
r19961 | $ hg revert --all -q | ||
$ rm a/a.orig b.rename/b c.copy | ||||
|
r19854 | |||
apply it and make sure our state is as expected | ||||
|
r25774 | (this also tests that same timestamp prevents backups from being | ||
removed, even though there are more than 'maxbackups' backups) | ||||
|
r30554 | $ f -t .hg/shelve-backup/default.patch | ||
.hg/shelve-backup/default.patch: file | ||||
$ touch -t 200001010000 .hg/shelve-backup/default.patch | ||||
$ f -t .hg/shelve-backup/default-1.patch | ||||
.hg/shelve-backup/default-1.patch: file | ||||
$ touch -t 200001010000 .hg/shelve-backup/default-1.patch | ||||
|
r25774 | |||
|
r19854 | $ 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 | ||||
$ hg shelve -l | ||||
|
r25774 | (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 | ||||
|
r39408 | default-01.shelve | ||
|
r25774 | default-1.hg | ||
default-1.patch | ||||
|
r39408 | default-1.shelve | ||
|
r25774 | default.hg | ||
default.patch | ||||
|
r39408 | default.shelve | ||
|
r25774 | |||
|
r19854 | $ 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 | ||||
|
r21852 | (this tests also that editor is invoked, if '--edit' is specified) | ||
|
r19854 | |||
$ hg status -C | ||||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
|
r21852 | $ 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 | ||||
|
r19854 | |||
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 | ||||
|
r19855 | wibble (*) wat (glob) | ||
|
r19854 | a/a | 1 + | ||
1 files changed, 1 insertions(+), 0 deletions(-) | ||||
and now "a/a" should reappear | ||||
|
r19943 | $ cd a | ||
|
r19854 | $ hg unshelve -q wibble | ||
|
r19943 | $ cd .. | ||
|
r19854 | $ hg status -C | ||
M a/a | ||||
A b.rename/b | ||||
b/b | ||||
A c.copy | ||||
c | ||||
R b/b | ||||
|
r25713 | ensure old shelve backups are being deleted automatically | ||
$ ls .hg/shelve-backup/ | ||||
default-01.hg | ||||
default-01.patch | ||||
|
r39408 | default-01.shelve | ||
|
r25713 | wibble.hg | ||
wibble.patch | ||||
|
r39408 | wibble.shelve | ||
|
r25713 | |||
|
r19854 | 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' | ||||
|
r20413 | temporarily committing pending changes (restore with 'hg unshelve --abort') | ||
rebasing shelved changes | ||||
|
r19854 | merging a/a | ||
|
r26614 | warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark') | ||
|
r19854 | unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||
[1] | ||||
|
r33766 | $ hg status -v | ||
M a/a | ||||
M b.rename/b | ||||
M c.copy | ||||
R b/b | ||||
? a/a.orig | ||||
# The repository is in an unfinished *unshelve* state. | ||||
# Unresolved merge conflicts: | ||||
# | ||||
|
r35394 | # a/a | ||
|
r33766 | # | ||
# To mark files as resolved: hg resolve --mark FILE | ||||
|
r38360 | # To continue: hg unshelve --continue | ||
# To abort: hg unshelve --abort | ||||
|
r33766 | |||
|
r19854 | |||
ensure that we have a merge with unresolved conflicts | ||||
|
r39780 | #if phasebased | ||
$ hg heads -q --template '{rev}\n' | ||||
8 | ||||
5 | ||||
$ hg parents -q --template '{rev}\n' | ||||
8 | ||||
5 | ||||
#endif | ||||
#if stripbased | ||||
|
r19961 | $ hg heads -q --template '{rev}\n' | ||
5 | ||||
4 | ||||
$ hg parents -q --template '{rev}\n' | ||||
4 | ||||
5 | ||||
|
r39780 | #endif | ||
|
r19854 | $ 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 | ||||
|
r39412 | +<<<<<<< shelve: 2377350b6337 - shelve: pending changes temporary commit | ||
|
r19854 | c | ||
+======= | ||||
+a | ||||
|
r39412 | +>>>>>>> working-copy: a68ec3400638 - shelve: changes to: [mq]: second.patch | ||
|
r22905 | 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 | ||||
|
r19854 | $ 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 | ||||
unshelve of 'default' aborted | ||||
$ hg heads -q | ||||
|
r39780 | [37]:2e69b451d1ea (re) | ||
|
r19854 | $ hg parents | ||
|
r39780 | changeset: [37]:2e69b451d1ea (re) | ||
|
r19854 | tag: tip | ||
|
r39780 | parent: 3:509104101065 (?) | ||
|
r19854 | 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 | ||||
|
r28124 | abort: no unshelve in progress | ||
|
r19854 | [255] | ||
$ hg status | ||||
A foo/foo | ||||
? a/a.orig | ||||
redo the unshelve to get a conflict | ||||
$ hg unshelve -q | ||||
|
r26614 | warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark') | ||
|
r19854 | 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 | ||||
|
r21947 | (no more unresolved files) | ||
|
r27694 | continue: hg unshelve --continue | ||
|
r19854 | |||
|
r19963 | $ hg commit -m 'commit while unshelve in progress' | ||
abort: unshelve already in progress | ||||
(use 'hg unshelve --continue' or 'hg unshelve --abort') | ||||
[255] | ||||
|
r28124 | $ hg graft --continue | ||
abort: no graft in progress | ||||
(continue: hg unshelve --continue) | ||||
[255] | ||||
|
r19854 | $ hg unshelve -c | ||
unshelve of 'default' complete | ||||
ensure the repo is as we hope | ||||
$ hg parents | ||||
|
r39780 | changeset: [37]:2e69b451d1ea (re) | ||
|
r19854 | tag: tip | ||
|
r39780 | parent: 3:509104101065 (?) | ||
|
r19854 | user: test | ||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: second | ||||
$ hg heads -q | ||||
|
r39780 | [37]:2e69b451d1ea (re) | ||
|
r19854 | |||
$ hg status -C | ||||
|
r19961 | A b.rename/b | ||
|
r19854 | b/b | ||
|
r19961 | A c.copy | ||
|
r19854 | 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 | ||||
|
r39797 | #else | ||
Dummy shelve op, to keep rev numbers aligned | ||||
$ echo foo > a/a | ||||
$ hg shelve -q -n dummy a/a | ||||
$ hg unshelve -q dummy | ||||
$ hg revert a/a | ||||
|
r19854 | #endif | ||
#if symlink | ||||
$ rm a/a | ||||
$ ln -s foo a/a | ||||
$ hg shelve -q -n symlink a/a | ||||
$ hg status a/a | ||||
|
r31021 | $ hg unshelve -q -n symlink | ||
|
r19854 | $ hg status a/a | ||
M a/a | ||||
$ hg revert a/a | ||||
|
r39797 | #else | ||
Dummy shelve op, to keep rev numbers aligned | ||||
$ echo bar > a/a | ||||
$ hg shelve -q -n dummy a/a | ||||
$ hg unshelve -q dummy | ||||
$ hg revert a/a | ||||
|
r19854 | #endif | ||
set up another conflict between a commit and a shelved change | ||||
$ hg revert -q -C -a | ||||
|
r19961 | $ rm a/a.orig b.rename/b c.copy | ||
|
r19854 | $ 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 | ||||
|
r27021 | $ hg unshelve --tool :merge-other --keep | ||
unshelving change 'default' | ||||
temporarily committing pending changes (restore with 'hg unshelve --abort') | ||||
rebasing shelved changes | ||||
merging a/a | ||||
$ hg parents -q | ||||
|
r39780 | (4|13):33f7f61e6c5e (re) | ||
|
r27021 | $ hg shelve -l | ||
|
r27092 | default (*)* changes to: second (glob) | ||
|
r27021 | $ hg status | ||
M a/a | ||||
A foo/foo | ||||
$ cat a/a | ||||
a | ||||
c | ||||
a | ||||
$ cat > a/a << EOF | ||||
> a | ||||
> c | ||||
> x | ||||
> EOF | ||||
|
r19854 | $ HGMERGE=true hg unshelve | ||
unshelving change 'default' | ||||
|
r20413 | temporarily committing pending changes (restore with 'hg unshelve --abort') | ||
rebasing shelved changes | ||||
|
r19854 | merging a/a | ||
|
r38637 | note: unshelved changes already existed in the working copy | ||
|
r19854 | $ hg parents -q | ||
|
r39780 | (4|13):33f7f61e6c5e (re) | ||
|
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 | ||||
|
r27092 | default (*)* changes to: create conflict (glob) | ||
|
r27019 | $ hg unshelve -k | ||
|
r19854 | unshelving change 'default' | ||
$ hg shelve --list | ||||
|
r27092 | default (*)* changes to: create conflict (glob) | ||
|
r19854 | $ hg shelve --cleanup | ||
$ hg shelve --list | ||||
|
r19874 | |||
|
r21715 | $ 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] | ||||
|
r19874 | test bookmarks | ||
$ hg bookmark test | ||||
$ hg bookmark | ||||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r19874 | $ hg shelve | ||
shelved as test | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg bookmark | ||||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r19874 | $ hg unshelve | ||
unshelving change 'test' | ||||
$ hg bookmark | ||||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
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 | ||||
|
r27092 | test (*)* changes to: create conflict (glob) | ||
|
r26520 | $ hg bookmark | ||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r19885 | $ hg --config extensions.mq=! unshelve | ||
unshelving change 'test' | ||||
|
r26520 | $ hg bookmark | ||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r19887 | |||
|
r22183 | shelve should leave dirstate clean (issue4055) | ||
|
r19887 | |||
$ 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 | ||||
|
r38356 | $ hg up 5c4c67fb7dce | ||
|
r19887 | 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 | ||||
|
r39780 | |||
$ hg rebase -d 6c103be8f4e4 --config extensions.rebase= | ||||
|
r39781 | rebasing 2:323bfa07f744 "xyz"( \(tip\))? (re) | ||
|
r39780 | merging x | ||
|
r39781 | saved backup bundle to \$TESTTMP/shelverebase/.hg/strip-backup/323bfa07f744-(78114325|7ae538ef)-rebase.hg (re) | ||
|
r19887 | $ hg unshelve | ||
unshelving change 'default' | ||||
|
r20413 | rebasing shelved changes | ||
|
r19887 | $ hg status | ||
M z | ||||
$ cd .. | ||||
|
r19961 | |||
|
r22183 | shelve should only unshelve pending changes (issue4068) | ||
|
r19961 | |||
$ hg init onlypendingchanges | ||||
$ cd onlypendingchanges | ||||
$ touch a | ||||
$ hg ci -Aqm a | ||||
$ touch b | ||||
$ hg ci -Aqm b | ||||
|
r38356 | $ hg up -q 3903775176ed | ||
|
r19961 | $ 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 | ||||
|
r38356 | $ hg up -q 0e067c57feba | ||
|
r19961 | $ hg unshelve | ||
unshelving change 'default' | ||||
|
r20413 | rebasing shelved changes | ||
|
r19961 | $ 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 | ||||
|
r38356 | $ hg up 3903775176ed | ||
|
r19961 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||
$ hg unshelve | ||||
unshelving change 'default' | ||||
|
r20413 | rebasing shelved changes | ||
|
r19961 | $ hg status | ||
A d | ||||
|
r20064 | test bug 4073 we need to enable obsolete markers for it | ||
|
r22955 | $ cat >> $HGRCPATH << EOF | ||
> [experimental] | ||||
|
r34867 | > evolution.createmarkers=True | ||
|
r20064 | > EOF | ||
$ hg shelve | ||||
shelved as default | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
|
r38356 | $ hg debugobsolete `hg log -r 0e067c57feba -T '{node}'` | ||
|
r33542 | obsoleted 1 changesets | ||
|
r20064 | $ hg unshelve | ||
unshelving change 'default' | ||||
|
r20150 | 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 | ||||
|
r20414 | |||
|
r20961 | unshelve and conflicts with tracked and untracked files | ||
|
r20414 | |||
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 | ||||
|
r20961 | $ echo g > f | ||
|
r20414 | $ hg unshelve | ||
unshelving change 'default' | ||||
$ hg st | ||||
A f | ||||
? f.orig | ||||
$ cat f | ||||
f | ||||
$ cat f.orig | ||||
|
r20961 | g | ||
|
r20414 | |||
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 | ||||
|
r37364 | #if repobundlerepo | ||
|
r39780 | $ 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) | ||||
|
r20414 | | | ||
|
r28627 | ~ | ||
|
r37364 | #endif | ||
|
r20414 | $ hg log -G --template '{rev} {desc|firstline} {author}' | ||
|
r39780 | @ [37] commit stuff test (re) | ||
|
r20414 | | | ||
| o 2 c test | ||||
|/ | ||||
o 0 a test | ||||
$ mv f.orig f | ||||
|
r20961 | $ echo 1 > a | ||
|
r20960 | $ hg unshelve --date '1073741824 0' | ||
|
r20414 | unshelving change 'default' | ||
temporarily committing pending changes (restore with 'hg unshelve --abort') | ||||
rebasing shelved changes | ||||
merging f | ||||
|
r26614 | warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||
|
r20414 | unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||
[1] | ||||
|
r39780 | |||
#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 | ||||
|
r20960 | $ hg log -G --template '{rev} {desc|firstline} {author} {date|isodate}' | ||
|
r27092 | @ 5 changes to: commit stuff shelve@localhost 1970-01-01 00:00 +0000 | ||
|
r20414 | | | ||
|
r20960 | | @ 4 pending changes temporary commit shelve@localhost 2004-01-10 13:37 +0000 | ||
|
r20414 | |/ | ||
|
r20960 | o 3 commit stuff test 1970-01-01 00:00 +0000 | ||
|
r20414 | | | ||
|
r20960 | | o 2 c test 1970-01-01 00:00 +0000 | ||
|
r20414 | |/ | ||
|
r20960 | o 0 a test 1970-01-01 00:00 +0000 | ||
|
r20414 | |||
|
r39780 | #endif | ||
|
r20414 | $ hg st | ||
M f | ||||
? f.orig | ||||
$ cat f | ||||
|
r39412 | <<<<<<< shelve: d44eae5c3d33 - shelve: pending changes temporary commit | ||
|
r20961 | g | ||
|
r20414 | ======= | ||
f | ||||
|
r39412 | >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff | ||
|
r20414 | $ cat f.orig | ||
|
r20961 | g | ||
|
r27021 | $ hg unshelve --abort -t false | ||
tool option will be ignored | ||||
|
r20414 | unshelve of 'default' aborted | ||
$ hg st | ||||
M a | ||||
? f.orig | ||||
$ cat f.orig | ||||
|
r20961 | g | ||
|
r20414 | $ 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 | ||||
|
r26614 | warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||
|
r20414 | unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||
[1] | ||||
$ hg st | ||||
M f | ||||
? f.orig | ||||
$ cat f | ||||
|
r38638 | <<<<<<< shelve: 6b563750f973 - test: intermediate other change | ||
|
r20961 | g | ||
|
r20414 | ======= | ||
f | ||||
|
r39412 | >>>>>>> working-copy: aef214a5229c - shelve: changes to: commit stuff | ||
|
r20414 | $ cat f.orig | ||
|
r20961 | g | ||
|
r20414 | $ hg unshelve --abort | ||
unshelve of 'default' aborted | ||||
|
r20961 | $ hg st | ||
? f.orig | ||||
$ cat f.orig | ||||
g | ||||
|
r20414 | $ hg shelve --delete default | ||
|
r22842 | Recreate some conflict again | ||
$ cd ../repo | ||||
|
r38356 | $ hg up -C -r 2e69b451d1ea | ||
|
r22842 | 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) | ||||
|
r26520 | $ hg bookmark | ||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r22842 | $ hg unshelve | ||
unshelving change 'default' | ||||
rebasing shelved changes | ||||
merging a/a | ||||
|
r26614 | warning: conflicts while merging a/a! (edit, then use 'hg resolve --mark') | ||
|
r22842 | unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||
[1] | ||||
|
r26520 | $ hg bookmark | ||
|
r39780 | test (4|13):33f7f61e6c5e (re) | ||
|
r22842 | |||
Test that resolving all conflicts in one direction (so that the rebase | ||||
is a no-op), works (issue4398) | ||||
$ hg revert -a -r . | ||||
|
r35394 | reverting a/a | ||
|
r22842 | $ hg resolve -m a/a | ||
(no more unresolved files) | ||||
|
r27694 | continue: hg unshelve --continue | ||
|
r22842 | $ hg unshelve -c | ||
|
r38481 | note: unshelved changes already existed in the working copy | ||
|
r22842 | unshelve of 'default' complete | ||
|
r26520 | $ hg bookmark | ||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r22842 | $ hg diff | ||
$ hg status | ||||
? a/a.orig | ||||
? foo/foo | ||||
$ hg summary | ||||
|
r39780 | parent: (4|13):33f7f61e6c5e tip (re) | ||
|
r22842 | create conflict | ||
branch: default | ||||
bookmarks: *test | ||||
commit: 2 unknown (clean) | ||||
update: (current) | ||||
|
r25382 | phases: 5 draft | ||
|
r22842 | |||
|
r21715 | $ 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] | ||||
|
r24478 | Test interactive shelve | ||
$ cat <<EOF >> $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 | ||||
|
r25799 | $ hg shelve --interactive --config ui.interactive=false | ||
abort: running non-interactively | ||||
[255] | ||||
|
r24478 | $ 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 | ||||
|
r26520 | $ hg bookmark | ||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r24478 | $ hg unshelve | ||
unshelving change 'test' | ||||
temporarily committing pending changes (restore with 'hg unshelve --abort') | ||||
rebasing shelved changes | ||||
merging a/a | ||||
|
r26520 | $ hg bookmark | ||
|
r39780 | \* test (4|13):33f7f61e6c5e (re) | ||
|
r24478 | $ cat a/a | ||
a | ||||
a | ||||
c | ||||
x | ||||
x | ||||
|
r25104 | |||
|
r30823 | shelve --patch and shelve --stat should work with valid shelfnames | ||
|
r25104 | |||
$ hg up --clean . | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r26520 | (leaving bookmark test) | ||
|
r25104 | $ 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 | ||||
|
r30823 | default-01 (*)* changes to: create conflict (glob) | ||
diff --git a/shelf-patch-b b/shelf-patch-b | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/shelf-patch-b | ||||
@@ -0,0 +1,1 @@ | ||||
+patch b | ||||
default (*)* 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 | ||||
|
r25104 | $ hg shelve --stat default default-01 | ||
|
r30823 | default-01 (*)* changes to: create conflict (glob) | ||
shelf-patch-b | 1 + | ||||
1 files changed, 1 insertions(+), 0 deletions(-) | ||||
default (*)* changes to: create conflict (glob) | ||||
shelf-patch-a | 1 + | ||||
1 files changed, 1 insertions(+), 0 deletions(-) | ||||
|
r25104 | $ hg shelve --patch default | ||
|
r27092 | default (*)* changes to: create conflict (glob) | ||
|
r25104 | |||
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 | ||||
|
r27092 | default (*)* changes to: create conflict (glob) | ||
|
r25104 | 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] | ||||
|
r30823 | $ hg shelve --patch default nonexistentshelf | ||
abort: cannot find shelf nonexistentshelf | ||||
[255] | ||||
|
r38737 | |||
when the user asks for a patch, we assume they want the most recent shelve if | ||||
they don't provide a shelve name | ||||
|
r30823 | $ hg shelve --patch | ||
|
r38737 | default-01 (*)* changes to: create conflict (glob) | ||
diff --git a/shelf-patch-b b/shelf-patch-b | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/shelf-patch-b | ||||
@@ -0,0 +1,1 @@ | ||||
+patch b | ||||
$ 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 | ||||
|
r30823 | [255] | ||
|
r25104 | |||
|
r26507 | $ cd .. | ||
Shelve from general delta repo uses bundle2 on disk | ||||
-------------------------------------------------- | ||||
no general delta | ||||
|
r26914 | $ hg clone --pull repo bundle1 --config format.usegeneraldelta=0 | ||
|
r26507 | requesting all changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 5 changesets with 8 changes to 6 files | ||||
|
r34662 | new changesets cc01e2b0c59f:33f7f61e6c5e | ||
|
r26507 | 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 | ||||
|
r39412 | 330882a04d2ce8487636b1fb292e5beea77fa1e3 | ||
|
r26507 | $ cd .. | ||
with general delta | ||||
|
r26914 | $ hg clone --pull repo bundle2 --config format.usegeneraldelta=1 | ||
|
r26507 | requesting all changes | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 5 changesets with 8 changes to 6 files | ||||
|
r34662 | new changesets cc01e2b0c59f:33f7f61e6c5e | ||
|
r26507 | 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 | ||||
|
r34027 | Stream params: {Compression: BZ} | ||
|
r37919 | changegroup -- {nbchanges: 1, version: 02} (mandatory: True) | ||
|
r39412 | 330882a04d2ce8487636b1fb292e5beea77fa1e3 | ||
|
r26507 | $ cd .. | ||
|
r26681 | |||
|
r26751 | Test visibility of in-memory changes inside transaction to external hook | ||
------------------------------------------------------------------------ | ||||
$ cd repo | ||||
$ echo xxxx >> x | ||||
$ hg commit -m "#5: changes to invoke rebase" | ||||
$ cat > $TESTTMP/checkvisibility.sh <<EOF | ||||
> echo "==== \$1:" | ||||
> hg parents --template "VISIBLE {rev}:{node|short}\n" | ||||
> # test that pending changes are hidden | ||||
> unset HG_PENDING | ||||
> hg parents --template "ACTUAL {rev}:{node|short}\n" | ||||
> echo "====" | ||||
> EOF | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [defaults] | ||||
> # to fix hash id of temporary revisions | ||||
> unshelve = --date '0 0' | ||||
> EOF | ||||
"hg unshelve" at REV5 implies steps below: | ||||
(1) commit changes in the working directory (REV6) | ||||
(2) unbundle shelved revision (REV7) | ||||
(3) rebase: merge REV7 into REV6 (REV6 => REV6, REV7) | ||||
(4) rebase: commit merged revision (REV8) | ||||
(5) rebase: update to REV6 (REV8 => REV6) | ||||
(6) update to REV5 (REV6 => REV5) | ||||
(7) abort transaction | ||||
== test visibility to external preupdate hook | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> preupdate.visibility = sh $TESTTMP/checkvisibility.sh preupdate | ||||
> EOF | ||||
$ echo nnnn >> n | ||||
$ sh $TESTTMP/checkvisibility.sh before-unshelving | ||||
==== before-unshelving: | ||||
|
r39780 | VISIBLE (5|19):703117a2acfb (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26751 | ==== | ||
$ hg unshelve --keep default | ||||
temporarily committing pending changes (restore with 'hg unshelve --abort') | ||||
rebasing shelved changes | ||||
==== preupdate: | ||||
|
r39780 | VISIBLE (6|20):54c00d20fb3f (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26751 | ==== | ||
==== preupdate: | ||||
|
r39780 | VISIBLE (8|21):8efe6f7537dc (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26751 | ==== | ||
==== preupdate: | ||||
|
r39780 | VISIBLE (6|20):54c00d20fb3f (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26751 | ==== | ||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> preupdate.visibility = | ||||
> EOF | ||||
$ sh $TESTTMP/checkvisibility.sh after-unshelving | ||||
==== after-unshelving: | ||||
|
r39780 | VISIBLE (5|19):703117a2acfb (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26751 | ==== | ||
|
r26752 | == test visibility to external update hook | ||
|
r38356 | $ hg update -q -C 703117a2acfb | ||
|
r26752 | |||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> update.visibility = sh $TESTTMP/checkvisibility.sh update | ||||
> EOF | ||||
$ echo nnnn >> n | ||||
$ sh $TESTTMP/checkvisibility.sh before-unshelving | ||||
==== before-unshelving: | ||||
|
r39780 | VISIBLE (5|19):703117a2acfb (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26752 | ==== | ||
$ hg unshelve --keep default | ||||
temporarily committing pending changes (restore with 'hg unshelve --abort') | ||||
rebasing shelved changes | ||||
==== update: | ||||
|
r39780 | VISIBLE (6|20):54c00d20fb3f (re) | ||
VISIBLE 1?7:492ed9d705e5 (re) | ||||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26752 | ==== | ||
==== update: | ||||
|
r39780 | VISIBLE (6|20):54c00d20fb3f (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26752 | ==== | ||
==== update: | ||||
|
r39780 | VISIBLE (5|19):703117a2acfb (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26752 | ==== | ||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> update.visibility = | ||||
> EOF | ||||
$ sh $TESTTMP/checkvisibility.sh after-unshelving | ||||
==== after-unshelving: | ||||
|
r39780 | VISIBLE (5|19):703117a2acfb (re) | ||
ACTUAL (5|19):703117a2acfb (re) | ||||
|
r26752 | ==== | ||
|
r26751 | $ cd .. | ||
|
r26942 | test .orig files go where the user wants them to | ||
|
r26681 | --------------------------------------------------------------- | ||
$ hg init salvage | ||||
$ cd salvage | ||||
$ echo 'content' > root | ||||
$ hg commit -A -m 'root' -q | ||||
$ echo '' > root | ||||
$ hg shelve -q | ||||
$ echo 'contADDent' > root | ||||
|
r26942 | $ hg unshelve -q --config 'ui.origbackuppath=.hg/origbackups' | ||
|
r26681 | warning: conflicts while merging root! (edit, then use 'hg resolve --mark') | ||
unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue') | ||||
[1] | ||||
|
r26942 | $ ls .hg/origbackups | ||
|
r34145 | root | ||
|
r26942 | $ rm -rf .hg/origbackups | ||
test Abort unshelve always gets user out of the unshelved state | ||||
--------------------------------------------------------------- | ||||
|
r26681 | |||
|
r38483 | with a corrupted shelve state file | ||
|
r26681 | $ sed 's/ae8c668541e8/123456789012/' .hg/shelvedstate > ../corrupt-shelvedstate | ||
|
r38482 | $ mv ../corrupt-shelvedstate .hg/shelvestate | ||
|
r38357 | $ hg unshelve --abort 2>&1 | grep 'aborted' | ||
|
r38483 | unshelve of 'default' aborted | ||
|
r38357 | $ hg summary | ||
parent: 0:ae8c668541e8 tip | ||||
root | ||||
branch: default | ||||
|
r38483 | commit: 1 modified | ||
|
r38357 | update: (current) | ||
phases: 1 draft | ||||
|
r26681 | $ hg up -C . | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r26933 | |||
$ cd .. | ||||
Keep active bookmark while (un)shelving even on shared repo (issue4940) | ||||
----------------------------------------------------------------------- | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [extensions] | ||||
> share = | ||||
> EOF | ||||
$ hg bookmarks -R repo | ||||
|
r39780 | test (4|13):33f7f61e6c5e (re) | ||
|
r26933 | $ hg share -B repo share | ||
updating working directory | ||||
6 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd share | ||||
$ hg bookmarks | ||||
|
r39780 | test (4|13):33f7f61e6c5e (re) | ||
|
r26933 | $ hg bookmarks foo | ||
$ hg bookmarks | ||||
|
r39780 | \* foo (5|19):703117a2acfb (re) | ||
test (4|13):33f7f61e6c5e (re) | ||||
|
r26933 | $ echo x >> x | ||
$ hg shelve | ||||
shelved as foo | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg bookmarks | ||||
|
r39780 | \* foo (5|19):703117a2acfb (re) | ||
test (4|13):33f7f61e6c5e (re) | ||||
|
r26933 | |||
$ hg unshelve | ||||
unshelving change 'foo' | ||||
$ hg bookmarks | ||||
|
r39780 | \* foo (5|19):703117a2acfb (re) | ||
test (4|13):33f7f61e6c5e (re) | ||||
|
r26933 | |||
$ cd .. | ||||
|
r27908 | |||
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 .. | ||||
|
r28571 | |||
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 | ||||
|
r30549 | $ cd .. | ||
|
r28571 | |||
|
r28573 | 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 | ||||
|
r30549 | $ cd .. | ||
|
r28573 | |||
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 | ||||
|
r38356 | $ hg update -r 7049e48789d7 | ||
|
r28573 | 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 | ||||
|
r30549 | $ cd .. | ||
|
r28573 | |||
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 | ||||
|
r30332 | expect that after resolving conflicts and successfully | ||
|
r28573 | running 'shelve --continue' the branch information won't be | ||
restored and branch will be unchanged. | ||||
|
r28941 | shelve on new branch, conflict with previous shelvedstate | ||
$ hg init conflict | ||||
$ cd conflict | ||||
|
r28573 | $ 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 | ||||
|
r32285 | $ cp .hg/shelvedstate .hg/shelvedstate_old | ||
$ cat .hg/shelvedstate_old | grep -v 'branchtorestore' > .hg/shelvedstate | ||||
|
r28573 | |||
$ 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 | ||||
|
r30549 | $ cd .. | ||
|
r28573 | |||
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 | ||||
|
r29536 | $ cd .. | ||
|
r30332 | Prepare unshelve with a corrupted shelvedstate | ||
|
r29536 | $ 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 .. | ||||
|
r30522 | |||
Unshelve respects --keep even if user intervention is needed | ||||
|
r30549 | $ hg init unshelvekeep && cd unshelvekeep | ||
|
r30522 | $ 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 | ||||
r36165 | default (*s ago) * changes to: 1 (glob) | |||
|
r30522 | $ 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 | ||||
r36165 | default (*s ago) * changes to: 1 (glob) | |||
|
r30549 | $ cd .. | ||
|
r30846 | |||
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 | ||||
|
r32285 | $ 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 | ||||
|
r39412 | > 8b058dae057a5a78f393f4535d9e363dd5efac9d f543b27db2cdb41737e2e0008dc524c471da1446 | ||
> f543b27db2cdb41737e2e0008dc524c471da1446 | ||||
|
r32285 | > | ||
> 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 | ||||
|
r39424 | |||
|
r39780 | #if phasebased | ||
|
r39925 | Unshelve with some metadata file missing | ||
---------------------------------------- | ||||
|
r39424 | |||
$ hg shelve | ||||
shelved as default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r39925 | $ 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) | ||||
|
r39780 | $ cat .hg/shelved/default.shelve | ||
node=82e0cb9893247d12667017593ce1e5655860f1ac | ||||
$ hg strip --hidden --rev 82e0cb989324 --no-backup | ||||
|
r39424 | $ 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 | ||||
|
r39925 | $ hg unshelve --abort | ||
unshelve of 'default' aborted | ||||
|
r39424 | |||
|
r39780 | #endif | ||
|
r32285 | $ cd .. | ||