test-transplant.t
1006 lines
| 24.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-transplant.t
|
r11800 | $ cat <<EOF >> $HGRCPATH | ||
> [extensions] | ||||
> transplant= | ||||
> EOF | ||||
$ hg init t | ||||
$ cd t | ||||
|
r27666 | $ hg transplant | ||
abort: no source URL, branch revision, or revision list provided | ||||
[255] | ||||
$ hg transplant --continue --all | ||||
abort: --continue is incompatible with --branch, --all and --merge | ||||
[255] | ||||
$ hg transplant --all tip | ||||
abort: --all requires a branch revision | ||||
[255] | ||||
$ hg transplant --all --branch default tip | ||||
abort: --all is incompatible with a revision list | ||||
[255] | ||||
|
r11800 | $ echo r1 > r1 | ||
$ hg ci -Amr1 -d'0 0' | ||||
adding r1 | ||||
|
r27666 | $ hg co -q null | ||
$ hg transplant tip | ||||
abort: no revision checked out | ||||
[255] | ||||
$ hg up -q | ||||
|
r11800 | $ echo r2 > r2 | ||
$ hg ci -Amr2 -d'1 0' | ||||
adding r2 | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ echo b1 > b1 | ||||
$ hg ci -Amb1 -d '0 0' | ||||
adding b1 | ||||
created new head | ||||
|
r27666 | $ hg merge 1 | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg transplant 1 | ||||
abort: outstanding uncommitted merges | ||||
[255] | ||||
$ hg up -qC tip | ||||
$ echo b0 > b1 | ||||
$ hg transplant 1 | ||||
abort: outstanding local changes | ||||
[255] | ||||
$ hg up -qC tip | ||||
|
r11800 | $ echo b2 > b2 | ||
$ hg ci -Amb2 -d '1 0' | ||||
adding b2 | ||||
$ echo b3 > b3 | ||||
$ hg ci -Amb3 -d '2 0' | ||||
adding b3 | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
4 b3 | ||||
3 b2 | ||||
2 0:17ab29e464c6 b1 | ||||
1 r2 | ||||
0 r1 | ||||
$ hg clone . ../rebase | ||||
updating to branch default | ||||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r27666 | $ hg init ../emptydest | ||
$ cd ../emptydest | ||||
$ hg transplant --source=../t > /dev/null | ||||
|
r11800 | $ cd ../rebase | ||
$ hg up -C 1 | ||||
1 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
rebase b onto r1 | ||||
|
r21411 | (this also tests that editor is not invoked if '--edit' is not specified) | ||
|
r11800 | |||
|
r21411 | $ HGEDITOR=cat hg transplant -a -b tip | ||
|
r11800 | applying 37a1297eb21b | ||
37a1297eb21b transplanted to e234d668f844 | ||||
applying 722f4667af76 | ||||
722f4667af76 transplanted to 539f377d78df | ||||
applying a53251cdf717 | ||||
a53251cdf717 transplanted to ffd6818a3975 | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
7 b3 | ||||
6 b2 | ||||
5 1:d11e3596cc1a b1 | ||||
4 b3 | ||||
3 b2 | ||||
2 0:17ab29e464c6 b1 | ||||
1 r2 | ||||
0 r1 | ||||
|
r31452 | test format of transplant_source | ||
$ hg log -r7 --debug | grep transplant_source | ||||
extra: transplant_source=\xa52Q\xcd\xf7\x17g\x9d\x19\x07\xb2\x89\xf9\x91SK\xe0\\\x99z | ||||
$ hg log -r7 -T '{extras}\n' | ||||
branch=defaulttransplant_source=\xa52Q\xcd\xf7\x17g\x9d\x19\x07\xb2\x89\xf9\x91SK\xe0\\\x99z | ||||
$ hg log -r7 -T '{join(extras, " ")}\n' | ||||
branch=default transplant_source=\xa52Q\xcd\xf7\x17g\x9d\x19\x07\xb2\x89\xf9\x91SK\xe0\\\x99z | ||||
|
r12811 | test transplanted revset | ||
$ hg log -r 'transplanted()' --template '{rev} {parents} {desc}\n' | ||||
5 1:d11e3596cc1a b1 | ||||
6 b2 | ||||
7 b3 | ||||
|
r27666 | $ hg log -r 'transplanted(head())' --template '{rev} {parents} {desc}\n' | ||
7 b3 | ||||
|
r30786 | $ hg help revisions.transplanted | ||
|
r14211 | "transplanted([set])" | ||
Transplanted changesets in set, or all transplanted changesets. | ||||
|
r30786 | |||
|
r12811 | |||
|
r21024 | test transplanted keyword | ||
|
r13689 | |||
$ hg log --template '{rev} {transplanted}\n' | ||||
7 a53251cdf717679d1907b289f991534be05c997a | ||||
6 722f4667af767100cb15b6a79324bf8abbfe1ef4 | ||||
5 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21 | ||||
4 | ||||
3 | ||||
2 | ||||
1 | ||||
0 | ||||
|
r17186 | test destination() revset predicate with a transplant of a transplant; new | ||
clone so subsequent rollback isn't affected | ||||
|
r21411 | (this also tests that editor is invoked if '--edit' is specified) | ||
|
r17186 | $ hg clone -q . ../destination | ||
$ cd ../destination | ||||
$ hg up -Cq 0 | ||||
$ hg branch -q b4 | ||||
$ hg ci -qm "b4" | ||||
|
r21411 | $ hg status --rev "7^1" --rev 7 | ||
A b3 | ||||
|
r22252 | $ cat > $TESTTMP/checkeditform.sh <<EOF | ||
> env | grep HGEDITFORM | ||||
> true | ||||
> EOF | ||||
|
r23092 | $ cat > $TESTTMP/checkeditform-n-cat.sh <<EOF | ||
> env | grep HGEDITFORM | ||||
> cat \$* | ||||
> EOF | ||||
$ HGEDITOR="sh $TESTTMP/checkeditform-n-cat.sh" hg transplant --edit 7 | ||||
|
r17186 | applying ffd6818a3975 | ||
|
r22252 | HGEDITFORM=transplant.normal | ||
|
r21411 | b3 | ||
HG: Enter commit message. Lines beginning with 'HG:' are removed. | ||||
HG: Leave message empty to abort commit. | ||||
HG: -- | ||||
HG: user: test | ||||
HG: branch 'b4' | ||||
HG: added b3 | ||||
|
r17186 | ffd6818a3975 transplanted to 502236fa76bb | ||
$ hg log -r 'destination()' | ||||
changeset: 5:e234d668f844 | ||||
parent: 1:d11e3596cc1a | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: b1 | ||||
changeset: 6:539f377d78df | ||||
user: test | ||||
date: Thu Jan 01 00:00:01 1970 +0000 | ||||
summary: b2 | ||||
changeset: 7:ffd6818a3975 | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: b3 | ||||
changeset: 9:502236fa76bb | ||||
branch: b4 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: b3 | ||||
$ hg log -r 'destination(a53251cdf717)' | ||||
changeset: 7:ffd6818a3975 | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: b3 | ||||
changeset: 9:502236fa76bb | ||||
branch: b4 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: b3 | ||||
test subset parameter in reverse order | ||||
$ hg log -r 'reverse(all()) and destination(a53251cdf717)' | ||||
changeset: 9:502236fa76bb | ||||
branch: b4 | ||||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: b3 | ||||
changeset: 7:ffd6818a3975 | ||||
user: test | ||||
date: Thu Jan 01 00:00:02 1970 +0000 | ||||
summary: b3 | ||||
back to the original dir | ||||
$ cd ../rebase | ||||
|
r15204 | rollback the transplant | ||
$ hg rollback | ||||
repository tip rolled back to revision 4 (undo transplant) | ||||
working directory now based on revision 1 | ||||
$ hg tip -q | ||||
4:a53251cdf717 | ||||
$ hg parents -q | ||||
1:d11e3596cc1a | ||||
$ hg status | ||||
? b1 | ||||
? b2 | ||||
? b3 | ||||
|
r11800 | $ hg clone ../t ../prune | ||
updating to branch default | ||||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd ../prune | ||||
$ hg up -C 1 | ||||
1 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
rebase b onto r1, skipping b2 | ||||
$ hg transplant -a -b tip -p 3 | ||||
applying 37a1297eb21b | ||||
37a1297eb21b transplanted to e234d668f844 | ||||
applying a53251cdf717 | ||||
a53251cdf717 transplanted to 7275fda4d04f | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
6 b3 | ||||
5 1:d11e3596cc1a b1 | ||||
4 b3 | ||||
3 b2 | ||||
2 0:17ab29e464c6 b1 | ||||
1 r2 | ||||
0 r1 | ||||
|
r16627 | test same-parent transplant with --log | ||
|
r11800 | |||
|
r16627 | $ hg clone -r 1 ../t ../sameparent | ||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files | ||||
|
r34662 | new changesets 17ab29e464c6:d11e3596cc1a | ||
|
r16627 | updating to branch default | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd ../sameparent | ||||
$ hg transplant --log -s ../prune 5 | ||||
searching for changes | ||||
applying e234d668f844 | ||||
e234d668f844 transplanted to e07aea8ecf9c | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
2 b1 | ||||
(transplanted from e234d668f844e1b1a765f01db83a32c0c7bfa170) | ||||
1 r2 | ||||
0 r1 | ||||
|
r23452 | remote transplant, and also test that transplant doesn't break with | ||
format-breaking diffopts | ||||
|
r11800 | |||
$ hg clone -r 1 ../t ../remote | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files | ||||
|
r34662 | new changesets 17ab29e464c6:d11e3596cc1a | ||
|
r11800 | updating to branch default | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd ../remote | ||||
|
r23452 | $ hg --config diff.noprefix=True transplant --log -s ../t 2 4 | ||
|
r11800 | searching for changes | ||
applying 37a1297eb21b | ||||
37a1297eb21b transplanted to c19cf0ccb069 | ||||
applying a53251cdf717 | ||||
a53251cdf717 transplanted to f7fe5bf98525 | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
3 b3 | ||||
(transplanted from a53251cdf717679d1907b289f991534be05c997a) | ||||
2 b1 | ||||
(transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21) | ||||
1 r2 | ||||
0 r1 | ||||
skip previous transplants | ||||
$ hg transplant -s ../t -a -b 4 | ||||
searching for changes | ||||
applying 722f4667af76 | ||||
722f4667af76 transplanted to 47156cd86c0b | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
4 b2 | ||||
3 b3 | ||||
(transplanted from a53251cdf717679d1907b289f991534be05c997a) | ||||
2 b1 | ||||
(transplanted from 37a1297eb21b3ef5c5d2ffac22121a0988ed9f21) | ||||
1 r2 | ||||
0 r1 | ||||
skip local changes transplanted to the source | ||||
$ echo b4 > b4 | ||||
$ hg ci -Amb4 -d '3 0' | ||||
adding b4 | ||||
$ hg clone ../t ../pullback | ||||
updating to branch default | ||||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd ../pullback | ||||
$ hg transplant -s ../remote -a -b tip | ||||
searching for changes | ||||
applying 4333daefcb15 | ||||
4333daefcb15 transplanted to 5f42c04e07cc | ||||
remote transplant with pull | ||||
|
r28549 | $ hg serve -R ../t -p $HGPORT -d --pid-file=../t.pid | ||
|
r11800 | $ cat ../t.pid >> $DAEMON_PIDS | ||
$ hg clone -r 0 ../t ../rp | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
|
r34662 | new changesets 17ab29e464c6 | ||
|
r11800 | updating to branch default | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd ../rp | ||||
|
r25678 | $ hg transplant -s http://localhost:$HGPORT/ 37a1297eb21b a53251cdf717 | ||
|
r11800 | searching for changes | ||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
applying a53251cdf717 | ||||
a53251cdf717 transplanted to 8d9279348abb | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
2 b3 | ||||
1 b1 | ||||
0 r1 | ||||
|
r18138 | remote transplant without pull | ||
|
r25679 | (It was using "2" and "4" (as the previous transplant used to) which referenced | ||
|
r25678 | revision different from one run to another) | ||
|
r18138 | |||
$ hg pull -q http://localhost:$HGPORT/ | ||||
|
r25678 | $ hg transplant -s http://localhost:$HGPORT/ 8d9279348abb 722f4667af76 | ||
|
r18138 | skipping already applied revision 2:8d9279348abb | ||
applying 722f4667af76 | ||||
722f4667af76 transplanted to 76e321915884 | ||||
|
r11800 | transplant --continue | ||
$ hg init ../tc | ||||
$ cd ../tc | ||||
$ cat <<EOF > foo | ||||
> foo | ||||
> bar | ||||
> baz | ||||
> EOF | ||||
$ echo toremove > toremove | ||||
|
r16507 | $ echo baz > baz | ||
|
r11800 | $ hg ci -Amfoo | ||
|
r16507 | adding baz | ||
|
r11800 | adding foo | ||
adding toremove | ||||
$ cat <<EOF > foo | ||||
> foo2 | ||||
> bar2 | ||||
> baz2 | ||||
> EOF | ||||
$ rm toremove | ||||
$ echo added > added | ||||
$ hg ci -Amfoo2 | ||||
adding added | ||||
removing toremove | ||||
$ echo bar > bar | ||||
|
r16507 | $ cat > baz <<EOF | ||
> before baz | ||||
> baz | ||||
> after baz | ||||
> EOF | ||||
|
r11800 | $ hg ci -Ambar | ||
adding bar | ||||
$ echo bar2 >> bar | ||||
$ hg ci -mbar2 | ||||
$ hg up 0 | ||||
|
r16507 | 3 files updated, 0 files merged, 2 files removed, 0 files unresolved | ||
|
r11800 | $ echo foobar > foo | ||
$ hg ci -mfoobar | ||||
created new head | ||||
$ hg transplant 1:3 | ||||
|
r16507 | applying 46ae92138f3c | ||
|
r11800 | patching file foo | ||
Hunk #1 FAILED at 0 | ||||
1 out of 1 hunks FAILED -- saving rejects to file foo.rej | ||||
patch failed to apply | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r12316 | [255] | ||
|
r11800 | |||
transplant -c shouldn't use an old changeset | ||||
$ hg up -C | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r32698 | updated to "e8643552fde5: foobar" | ||
|
r28029 | 1 other heads for branch "default" | ||
|
r11800 | $ rm added | ||
|
r27677 | $ hg transplant --continue | ||
abort: no transplant to continue | ||||
[255] | ||||
|
r11800 | $ hg transplant 1 | ||
|
r16507 | applying 46ae92138f3c | ||
|
r11800 | patching file foo | ||
Hunk #1 FAILED at 0 | ||||
1 out of 1 hunks FAILED -- saving rejects to file foo.rej | ||||
patch failed to apply | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r12316 | [255] | ||
|
r27666 | $ cp .hg/transplant/journal .hg/transplant/journal.orig | ||
$ cat .hg/transplant/journal | ||||
# User test | ||||
# Date 0 0 | ||||
# Node ID 46ae92138f3ce0249f6789650403286ead052b6d | ||||
# Parent e8643552fde58f57515e19c4b373a57c96e62af3 | ||||
foo2 | ||||
$ grep -v 'Date' .hg/transplant/journal.orig > .hg/transplant/journal | ||||
$ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e | ||||
abort: filter corrupted changeset (no user or date) | ||||
[255] | ||||
$ cp .hg/transplant/journal.orig .hg/transplant/journal | ||||
|
r22252 | $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e | ||
HGEDITFORM=transplant.normal | ||||
|
r16507 | 46ae92138f3c transplanted as 9159dada197d | ||
|
r11800 | $ hg transplant 1:3 | ||
|
r16507 | skipping already applied revision 1:46ae92138f3c | ||
applying 9d6d6b5a8275 | ||||
9d6d6b5a8275 transplanted to 2d17a10c922f | ||||
applying 1dab759070cf | ||||
1dab759070cf transplanted to e06a69927eb0 | ||||
|
r11800 | $ hg locate | ||
added | ||||
bar | ||||
|
r16507 | baz | ||
|
r11800 | foo | ||
|
r16507 | |||
test multiple revisions and --continue | ||||
$ hg up -qC 0 | ||||
$ echo bazbaz > baz | ||||
$ hg ci -Am anotherbaz baz | ||||
created new head | ||||
$ hg transplant 1:3 | ||||
applying 46ae92138f3c | ||||
46ae92138f3c transplanted to 1024233ea0ba | ||||
applying 9d6d6b5a8275 | ||||
patching file baz | ||||
Hunk #1 FAILED at 0 | ||||
1 out of 1 hunks FAILED -- saving rejects to file baz.rej | ||||
patch failed to apply | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r16507 | [255] | ||
|
r27678 | $ hg transplant 1:3 | ||
abort: transplant in progress | ||||
(use 'hg transplant --continue' or 'hg update' to abort) | ||||
[255] | ||||
|
r16507 | $ echo fixed > baz | ||
$ hg transplant --continue | ||||
9d6d6b5a8275 transplanted as d80c49962290 | ||||
applying 1dab759070cf | ||||
1dab759070cf transplanted to aa0ffe6bd5ae | ||||
|
r11800 | $ cd .. | ||
|
r12399 | Issue1111: Test transplant --merge | ||
|
r11800 | |||
$ hg init t1111 | ||||
$ cd t1111 | ||||
$ echo a > a | ||||
$ hg ci -Am adda | ||||
adding a | ||||
$ echo b >> a | ||||
$ hg ci -m appendb | ||||
$ echo c >> a | ||||
$ hg ci -m appendc | ||||
$ hg up -C 0 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo d >> a | ||||
$ hg ci -m appendd | ||||
created new head | ||||
|
r21024 | transplant | ||
|
r11800 | |||
|
r22252 | $ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant -m 1 -e | ||
|
r11800 | applying 42dc4432fd35 | ||
|
r22252 | HGEDITFORM=transplant.merge | ||
|
r11800 | 1:42dc4432fd35 merged at a9f4acbac129 | ||
|
r22252 | $ hg update -q -C 2 | ||
$ cat > a <<EOF | ||||
> x | ||||
> y | ||||
> z | ||||
> EOF | ||||
$ hg commit -m replace | ||||
$ hg update -q -C 4 | ||||
$ hg transplant -m 5 | ||||
applying 600a3cdcb41d | ||||
patching file a | ||||
Hunk #1 FAILED at 0 | ||||
1 out of 1 hunks FAILED -- saving rejects to file a.rej | ||||
patch failed to apply | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r22252 | [255] | ||
$ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg transplant --continue -e | ||||
HGEDITFORM=transplant.merge | ||||
600a3cdcb41d transplanted as a3f88be652e0 | ||||
|
r11800 | $ cd .. | ||
test transplant into empty repository | ||||
$ hg init empty | ||||
$ cd empty | ||||
$ hg transplant -s ../t -b tip -a | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 4 changesets with 4 changes to 4 files | ||||
|
r34662 | new changesets 17ab29e464c6:a53251cdf717 | ||
|
r20020 | |||
test "--merge" causing pull from source repository on local host | ||||
$ hg --config extensions.mq= -q strip 2 | ||||
$ hg transplant -s ../t --merge tip | ||||
searching for changes | ||||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 2 changesets with 2 changes to 2 files | ||||
applying a53251cdf717 | ||||
4:a53251cdf717 merged at 4831f4dc831a | ||||
|
r20267 | test interactive transplant | ||
$ hg --config extensions.strip= -q strip 0 | ||||
$ hg -R ../t log -G --template "{rev}:{node|short}" | ||||
@ 4:a53251cdf717 | ||||
| | ||||
o 3:722f4667af76 | ||||
| | ||||
o 2:37a1297eb21b | ||||
| | ||||
| o 1:d11e3596cc1a | ||||
|/ | ||||
o 0:17ab29e464c6 | ||||
$ hg transplant -q --config ui.interactive=true -s ../t <<EOF | ||||
|
r27666 | > ? | ||
> x | ||||
> q | ||||
> EOF | ||||
0:17ab29e464c6 | ||||
apply changeset? [ynmpcq?]: ? | ||||
y: yes, transplant this changeset | ||||
n: no, skip this changeset | ||||
m: merge at this changeset | ||||
p: show patch | ||||
c: commit selected changesets | ||||
q: quit and cancel transplant | ||||
?: ? (show this help) | ||||
apply changeset? [ynmpcq?]: x | ||||
unrecognized response | ||||
apply changeset? [ynmpcq?]: q | ||||
$ hg transplant -q --config ui.interactive=true -s ../t <<EOF | ||||
|
r20267 | > p | ||
> y | ||||
> n | ||||
> n | ||||
> m | ||||
> c | ||||
> EOF | ||||
0:17ab29e464c6 | ||||
|
r22589 | apply changeset? [ynmpcq?]: p | ||
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 | ||||
|
r20267 | +++ b/r1 Thu Jan 01 00:00:00 1970 +0000 | ||
@@ -0,0 +1,1 @@ | ||||
+r1 | ||||
|
r22589 | apply changeset? [ynmpcq?]: y | ||
1:d11e3596cc1a | ||||
apply changeset? [ynmpcq?]: n | ||||
2:37a1297eb21b | ||||
apply changeset? [ynmpcq?]: n | ||||
3:722f4667af76 | ||||
apply changeset? [ynmpcq?]: m | ||||
4:a53251cdf717 | ||||
apply changeset? [ynmpcq?]: c | ||||
|
r20267 | $ hg log -G --template "{node|short}" | ||
@ 88be5dde5260 | ||||
|\ | ||||
| o 722f4667af76 | ||||
| | | ||||
| o 37a1297eb21b | ||||
|/ | ||||
o 17ab29e464c6 | ||||
$ hg transplant -q --config ui.interactive=true -s ../t <<EOF | ||||
> x | ||||
> ? | ||||
> y | ||||
> q | ||||
> EOF | ||||
1:d11e3596cc1a | ||||
|
r22589 | apply changeset? [ynmpcq?]: x | ||
unrecognized response | ||||
apply changeset? [ynmpcq?]: ? | ||||
y: yes, transplant this changeset | ||||
|
r20269 | n: no, skip this changeset | ||
|
r20267 | m: merge at this changeset | ||
p: show patch | ||||
c: commit selected changesets | ||||
|
r20269 | q: quit and cancel transplant | ||
?: ? (show this help) | ||||
|
r22589 | apply changeset? [ynmpcq?]: y | ||
4:a53251cdf717 | ||||
apply changeset? [ynmpcq?]: q | ||||
|
r20267 | $ hg heads --template "{node|short}\n" | ||
88be5dde5260 | ||||
|
r11800 | $ cd .. | ||
|
r16972 | #if unix-permissions system-sh | ||
|
r11800 | test filter | ||
$ hg init filter | ||||
$ cd filter | ||||
$ cat <<'EOF' >test-filter | ||||
> #!/bin/sh | ||||
> sed 's/r1/r2/' $1 > $1.new | ||||
> mv $1.new $1 | ||||
> EOF | ||||
$ chmod +x test-filter | ||||
$ hg transplant -s ../t -b tip -a --filter ./test-filter | ||||
|
r12376 | filtering * (glob) | ||
|
r11800 | applying 17ab29e464c6 | ||
17ab29e464c6 transplanted to e9ffc54ea104 | ||||
|
r12376 | filtering * (glob) | ||
|
r11800 | applying 37a1297eb21b | ||
37a1297eb21b transplanted to 348b36d0b6a5 | ||||
|
r12376 | filtering * (glob) | ||
|
r11800 | applying 722f4667af76 | ||
722f4667af76 transplanted to 0aa6979afb95 | ||||
|
r12376 | filtering * (glob) | ||
|
r11800 | applying a53251cdf717 | ||
a53251cdf717 transplanted to 14f8512272b5 | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
3 b3 | ||||
2 b2 | ||||
1 b1 | ||||
0 r2 | ||||
$ cd .. | ||||
test filter with failed patch | ||||
$ cd filter | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
$ echo foo > b1 | ||||
|
r12156 | $ hg ci -Am foo | ||
|
r11800 | adding b1 | ||
adding test-filter | ||||
created new head | ||||
$ hg transplant 1 --filter ./test-filter | ||||
|
r12376 | filtering * (glob) | ||
|
r11800 | applying 348b36d0b6a5 | ||
file b1 already exists | ||||
1 out of 1 hunks FAILED -- saving rejects to file b1.rej | ||||
patch failed to apply | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r12316 | [255] | ||
|
r11800 | $ cd .. | ||
|
r13579 | test environment passed to filter | ||
$ hg init filter-environment | ||||
$ cd filter-environment | ||||
$ cat <<'EOF' >test-filter-environment | ||||
> #!/bin/sh | ||||
> echo "Transplant by $HGUSER" >> $1 | ||||
> echo "Transplant from rev $HGREVISION" >> $1 | ||||
> EOF | ||||
$ chmod +x test-filter-environment | ||||
$ hg transplant -s ../t --filter ./test-filter-environment 0 | ||||
filtering * (glob) | ||||
applying 17ab29e464c6 | ||||
17ab29e464c6 transplanted to 5190e68026a0 | ||||
$ hg log --template '{rev} {parents} {desc}\n' | ||||
0 r1 | ||||
Transplant by test | ||||
Transplant from rev 17ab29e464c6ca53e329470efe2a9918ac617a6f | ||||
$ cd .. | ||||
|
r13789 | test transplant with filter handles invalid changelog | ||
$ hg init filter-invalid-log | ||||
$ cd filter-invalid-log | ||||
$ cat <<'EOF' >test-filter-invalid-log | ||||
> #!/bin/sh | ||||
> echo "" > $1 | ||||
> EOF | ||||
$ chmod +x test-filter-invalid-log | ||||
$ hg transplant -s ../t --filter ./test-filter-invalid-log 0 | ||||
filtering * (glob) | ||||
|
r13790 | abort: filter corrupted changeset (no user or date) | ||
|
r13789 | [255] | ||
|
r16912 | $ cd .. | ||
|
r11800 | |||
|
r16972 | #endif | ||
|
r11800 | test with a win32ext like setup (differing EOLs) | ||
$ hg init twin1 | ||||
$ cd twin1 | ||||
$ echo a > a | ||||
$ echo b > b | ||||
$ echo b >> b | ||||
$ hg ci -Am t | ||||
adding a | ||||
adding b | ||||
$ echo a > b | ||||
$ echo b >> b | ||||
$ hg ci -m changeb | ||||
$ cd .. | ||||
$ hg init twin2 | ||||
$ cd twin2 | ||||
$ echo '[patch]' >> .hg/hgrc | ||||
$ echo 'eol = crlf' >> .hg/hgrc | ||||
|
r36033 | $ $PYTHON -c "open('b', 'wb').write(b'b\r\nb\r\n')" | ||
|
r14012 | $ hg ci -Am addb | ||
adding b | ||||
|
r11800 | $ hg transplant -s ../twin1 tip | ||
|
r14012 | searching for changes | ||
warning: repository is unrelated | ||||
|
r11800 | applying 2e849d776c17 | ||
|
r14012 | 2e849d776c17 transplanted to 8e65bebc063e | ||
|
r12943 | $ cat b | ||
a\r (esc) | ||||
b\r (esc) | ||||
|
r11800 | $ cd .. | ||
|
r16400 | |||
test transplant with merge changeset is skipped | ||||
$ hg init merge1a | ||||
$ cd merge1a | ||||
$ echo a > a | ||||
$ hg ci -Am a | ||||
adding a | ||||
$ hg branch b | ||||
marked working directory as branch b | ||||
(branches are permanent and global, did you want a bookmark?) | ||||
$ hg ci -m branchb | ||||
$ echo b > b | ||||
$ hg ci -Am b | ||||
adding b | ||||
$ hg update default | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg merge b | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg ci -m mergeb | ||||
$ cd .. | ||||
$ hg init merge1b | ||||
$ cd merge1b | ||||
$ hg transplant -s ../merge1a tip | ||||
|
r16912 | $ cd .. | ||
|
r16400 | |||
test transplant with merge changeset accepts --parent | ||||
$ hg init merge2a | ||||
$ cd merge2a | ||||
$ echo a > a | ||||
$ hg ci -Am a | ||||
adding a | ||||
$ hg branch b | ||||
marked working directory as branch b | ||||
(branches are permanent and global, did you want a bookmark?) | ||||
$ hg ci -m branchb | ||||
$ echo b > b | ||||
$ hg ci -Am b | ||||
adding b | ||||
$ hg update default | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg merge b | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg ci -m mergeb | ||||
$ cd .. | ||||
$ hg init merge2b | ||||
$ cd merge2b | ||||
|
r27666 | $ hg transplant -s ../merge2a --parent tip tip | ||
abort: be9f9b39483f is not a parent of be9f9b39483f | ||||
[255] | ||||
|
r16400 | $ hg transplant -s ../merge2a --parent 0 tip | ||
applying be9f9b39483f | ||||
be9f9b39483f transplanted to 9959e51f94d1 | ||||
|
r16912 | $ cd .. | ||
|
r17319 | |||
test transplanting a patch turning into a no-op | ||||
$ hg init binarysource | ||||
$ cd binarysource | ||||
$ echo a > a | ||||
$ hg ci -Am adda a | ||||
|
r38390 | >>> open('b', 'wb').write(b'\0b1') and None | ||
|
r17319 | $ hg ci -Am addb b | ||
|
r38390 | >>> open('b', 'wb').write(b'\0b2') and None | ||
|
r17319 | $ hg ci -m changeb b | ||
$ cd .. | ||||
$ hg clone -r0 binarysource binarydest | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
|
r34662 | new changesets 07f494440405 | ||
|
r17319 | updating to branch default | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd binarydest | ||||
$ cp ../binarysource/b b | ||||
$ hg ci -Am addb2 b | ||||
$ hg transplant -s ../binarysource 2 | ||||
searching for changes | ||||
applying 7a7d57e15850 | ||||
|
r17320 | skipping emptied changeset 7a7d57e15850 | ||
|
r23781 | |||
Test empty result in --continue | ||||
$ hg transplant -s ../binarysource 1 | ||||
searching for changes | ||||
applying 645035761929 | ||||
file b already exists | ||||
1 out of 1 hunks FAILED -- saving rejects to file b.rej | ||||
patch failed to apply | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r23781 | [255] | ||
$ hg status | ||||
? b.rej | ||||
$ hg transplant --continue | ||||
645035761929 skipped due to empty diff | ||||
|
r17319 | $ cd .. | ||
|
r17539 | Explicitly kill daemons to let the test exit on Windows | ||
|
r25474 | $ killdaemons.py | ||
|
r17539 | |||
|
r25757 | Test that patch-ed files are treated as "modified", when transplant is | ||
aborted by failure of patching, even if none of mode, size and | ||||
timestamp of them isn't changed on the filesystem (see also issue4583) | ||||
$ cd t | ||||
$ cat > $TESTTMP/abort.py <<EOF | ||||
> # emulate that patch.patch() is aborted at patching on "abort" file | ||||
|
r34252 | > from mercurial import error, extensions, patch as patchmod | ||
|
r25757 | > def patch(orig, ui, repo, patchname, | ||
|
r36344 | > strip=1, prefix=b'', files=None, | ||
> eolmode=b'strict', similarity=0): | ||||
|
r25757 | > if files is None: | ||
> files = set() | ||||
> r = orig(ui, repo, patchname, | ||||
> strip=strip, prefix=prefix, files=files, | ||||
> eolmode=eolmode, similarity=similarity) | ||||
|
r36344 | > if b'abort' in files: | ||
|
r34252 | > raise error.PatchError('intentional error while patching') | ||
|
r25757 | > return r | ||
> def extsetup(ui): | ||||
> extensions.wrapfunction(patchmod, 'patch', patch) | ||||
> EOF | ||||
$ echo X1 > r1 | ||||
$ hg diff --nodates r1 | ||||
diff -r a53251cdf717 r1 | ||||
--- a/r1 | ||||
+++ b/r1 | ||||
@@ -1,1 +1,1 @@ | ||||
-r1 | ||||
+X1 | ||||
$ hg commit -m "X1 as r1" | ||||
$ echo 'marking to abort patching' > abort | ||||
$ hg add abort | ||||
$ echo Y1 > r1 | ||||
$ hg diff --nodates r1 | ||||
diff -r 22c515968f13 r1 | ||||
--- a/r1 | ||||
+++ b/r1 | ||||
@@ -1,1 +1,1 @@ | ||||
-X1 | ||||
+Y1 | ||||
$ hg commit -m "Y1 as r1" | ||||
$ hg update -q -C d11e3596cc1a | ||||
$ cat r1 | ||||
r1 | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [fakedirstatewritetime] | ||||
> # emulate invoking dirstate.write() via repo.status() or markcommitted() | ||||
> # at 2000-01-01 00:00 | ||||
> fakenow = 200001010000 | ||||
> | ||||
> # emulate invoking patch.internalpatch() at 2000-01-01 00:00 | ||||
> [fakepatchtime] | ||||
> fakenow = 200001010000 | ||||
> | ||||
> [extensions] | ||||
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py | ||||
> fakepatchtime = $TESTDIR/fakepatchtime.py | ||||
|
r27639 | > abort = $TESTTMP/abort.py | ||
|
r25757 | > EOF | ||
$ hg transplant "22c515968f13::" | ||||
applying 22c515968f13 | ||||
22c515968f13 transplanted to * (glob) | ||||
applying e38700ba9dd3 | ||||
intentional error while patching | ||||
|
r27676 | abort: fix up the working directory and run hg transplant --continue | ||
|
r25757 | [255] | ||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> fakedirstatewritetime = ! | ||||
> fakepatchtime = ! | ||||
|
r25879 | > [extensions] | ||
|
r25757 | > abort = ! | ||
> EOF | ||||
$ cat r1 | ||||
Y1 | ||||
$ hg debugstate | grep ' r1$' | ||||
n 644 3 unset r1 | ||||
$ hg status -A r1 | ||||
M r1 | ||||
|
r25879 | Test that rollback by unexpected failure after transplanting the first | ||
revision restores dirstate correctly. | ||||
$ hg rollback -q | ||||
$ rm -f abort | ||||
$ hg update -q -C d11e3596cc1a | ||||
$ hg parents -T "{node|short}\n" | ||||
d11e3596cc1a | ||||
$ hg status -A | ||||
C r1 | ||||
C r2 | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> # emulate failure at transplanting the 2nd revision | ||||
> pretxncommit.abort = test ! -f abort | ||||
> EOF | ||||
$ hg transplant "22c515968f13::" | ||||
applying 22c515968f13 | ||||
22c515968f13 transplanted to * (glob) | ||||
applying e38700ba9dd3 | ||||
transaction abort! | ||||
rollback completed | ||||
abort: pretxncommit.abort hook exited with status 1 | ||||
[255] | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [hooks] | ||||
> pretxncommit.abort = ! | ||||
> EOF | ||||
$ hg parents -T "{node|short}\n" | ||||
d11e3596cc1a | ||||
$ hg status -A | ||||
M r1 | ||||
? abort | ||||
C r2 | ||||
|
r25757 | $ cd .. | ||