sapling/tests/test-rebase-collapse.t
Durham Goode ad813edcbd treemanifest: enable treemanifest by default in tests
Summary:
Now that all our repos are treemanifest, let's enable the extension by
default in tests. Once we're certain no one needs it in production we'll also
make it the default in core Mercurial.

This diff includes a minor fix in treemanifest to be aware of always-enabled
extensions. It won't matter until we actually add treemanifest to the list of
default enabled extensions, but I caught this while testing things.

Reviewed By: ikostia

Differential Revision: D15030253

fbshipit-source-id: d8361f915928b6ad90665e6ed330c1df5c8d8d86
2019-05-28 03:17:02 -07:00

498 lines
7.5 KiB
Perl

$ setconfig extensions.treemanifest=!
$ enable rebase strip
$ setconfig phases.publish=0
Create repo a:
$ newrepo a
$ drawdag <<'EOS'
> o H
> |
> | o G
> |/|
> o | F
> | |
> | o E
> |/
> | o D
> | |
> | o C
> | |
> | o B
> |/
> o A
> EOS
$ cd $TESTTMP
Rebasing B onto H and collapsing changesets:
$ hg clone -q -u $D a a1
$ cd a1
$ cat > $TESTTMP/editor.sh <<EOF
> echo "==== before editing"
> cat \$1
> echo "===="
> echo "edited manually" >> \$1
> EOF
$ HGEDITOR="sh $TESTTMP/editor.sh" hg rebase --collapse -e --dest $H
rebasing 1:112478962961 "B"
rebasing 4:26805aba1e60 "C"
rebasing 7:f585351a92f8 "D" (tip)
==== before editing
Collapsed revision
* B
* C
* D
HG: Enter commit message. Lines beginning with 'HG:' are removed.
HG: Leave message empty to abort commit.
HG: --
HG: user: test
HG: branch 'default'
HG: added B
HG: added C
HG: added D
====
$ hg log -Gr 'all()' -T '{desc}'
@ Collapsed revision
| * B
| * C
| * D
|
|
| edited manually
o H
|
| o G
|/|
o | F
| |
| o E
|/
o A
$ hg manifest --rev tip
A
B
C
D
F
H
$ cd $TESTTMP
Rebasing E onto H:
$ hg clone -q -u $H a a2
$ cd a2
$ hg rebase --source $E --collapse --dest $H
rebasing 2:7fb047a69f22 "E"
rebasing 5:c6001eacfde5 "G"
$ hg log -Gr 'all()' -T '{desc}'
o Collapsed revision
| * E
| * G
| o D
| |
@ | H
| |
| o C
| |
o | F
| |
| o B
|/
o A
$ hg manifest --rev tip
A
E
F
H
$ cd ..
Rebasing G onto H with custom message:
$ hg clone -q -u $H a a3
$ cd a3
$ hg rebase --base 6 -m 'custom message'
abort: message can only be specified with collapse
[255]
$ cat > $TESTTMP/checkeditform.sh <<EOF
> env | grep HGEDITFORM
> true
> EOF
$ HGEDITOR="sh $TESTTMP/checkeditform.sh" hg rebase --source $E --collapse -m 'custom message' -e --dest $H
rebasing 2:7fb047a69f22 "E"
rebasing 5:c6001eacfde5 "G"
HGEDITFORM=rebase.collapse
$ hg log -Gr 'all()' -T '{desc}'
o custom message
|
| o D
| |
@ | H
| |
| o C
| |
o | F
| |
| o B
|/
o A
$ hg manifest --rev tip
A
E
F
H
$ cd ..
Create repo b:
$ newrepo b
$ drawdag <<'EOS'
> o H
> |
> | o G
> | |\
> | | o F
> | | |
> | | o E
> | | |
> | o | D # D/D=D
> | |\|
> | o | C
> |/ /
> | o B
> |/
> o A
> EOS
$ cd $TESTTMP
Rebase and collapse - more than one external (fail):
$ hg clone -q -u $H b b1
$ cd b1
$ hg rebase -s $C --dest $H --collapse
abort: unable to collapse on top of 3, there is more than one external parent: 1, 6
[255]
Rebase and collapse - E onto H:
$ hg rebase -s $E --dest $H --collapse # root (E) is not a merge
rebasing 5:49cb92066bfd "E"
rebasing 6:11abe3fb10b8 "F"
rebasing 7:202d1982ae8b "G" (tip)
$ hg log -Gr 'all()' -T '{desc}'
o Collapsed revision
|\ * E
| | * F
| | * G
| o D
| |\
@ | | H
| | |
+---o C
| |
| o B
|/
o A
$ hg manifest --rev tip
A
C
D
E
F
H
Create repo c:
$ newrepo c
$ drawdag <<'EOS'
> o I
> |
> | o H
> | |\
> | | o G
> | | |
> | | o F # F/E=F\n
> | | | # F/F=(removed)
> | | o E
> | | |
> | o | D # D/D=D
> | |\|
> | o | C
> |/ /
> | o B
> |/
> o A
> EOS
$ cd $TESTTMP
Rebase and collapse - E onto I:
$ hg clone -q -u $I c c1
$ cd c1
$ hg rebase -s $E --dest $I --collapse # root (E) is not a merge
rebasing 5:49cb92066bfd "E"
rebasing 6:3cf8a9483881 "F"
merging E
rebasing 7:066fd31e12b9 "G"
rebasing 8:c8947cb2e149 "H" (tip)
$ hg log -Gr 'all()' -T '{desc}'
o Collapsed revision
|\ * E
| | * F
| | * G
| | * H
| o D
| |\
@ | | I
| | |
+---o C
| |
| o B
|/
o A
$ hg manifest --rev tip
A
C
D
E
G
I
$ hg up tip -q
$ cat E
F
Create repo d:
$ newrepo d
$ drawdag <<'EOS'
> o F
> |
> | o E
> | |\
> | | o D
> | | |
> | o | C
> | |/
> | o B
> |/
> o A
> EOS
$ cd $TESTTMP
Rebase and collapse - B onto F:
$ hg clone -q -u $F d d1
$ cd d1
$ hg rebase -s $B --collapse --dest $F
rebasing 1:112478962961 "B"
rebasing 3:26805aba1e60 "C"
rebasing 4:be0ef73c17ad "D"
rebasing 5:02c4367d6973 "E" (tip)
$ hg log -Gr 'all()' -T '{desc}'
o Collapsed revision
| * B
| * C
| * D
| * E
@ F
|
o A
$ hg manifest --rev tip
A
B
C
D
F
Rebase, collapse and copies
$ newrepo copies
$ drawdag << 'EOS'
> Q # Q/c=c\n (renamed from f)
> | # Q/g=b\n (renamed from e)
> |
> P # P/d=a\n (copied from a)
> | # P/e=b\n (renamed from b)
> | # P/f=c\n (renamed from c)
> |
> | Y # Y/a=a\na\n
> |/ # Y/b=b\nb\n
> | # Y/c=c\nc\n
> |
> | # X/a=a\n
> X # X/b=b\n
> # X/c=c\n
> # drawdag.defaultfiles=false
> EOS
$ hg up -q $Q
$ hg rebase --collapse -d $Y
rebasing 1:24b95cf2173d "P"
merging a and d to d
merging b and e to e
merging c and f to f
rebasing 3:2ccc3426bf6d "Q" (tip)
merging f and c to c
merging e and g to g
$ hg st
$ hg st --copies --change tip
A d
a
A g
b
R b
$ hg up tip -q
$ cat c
c
c
$ cat d
a
a
$ cat g
b
b
$ hg log -r . --template "{file_copies}\n"
d (a)g (b)
$ hg log -Gr 'all()' -T '{desc}'
@ Collapsed revision
| * P
| * Q
o Y
|
o X
Test collapsing in place
$ hg rebase --collapse -b . -d $X
rebasing 2:71cf332de4cf "Y"
rebasing 4:c2a9a5beba1a "Collapsed revision" (tip)
$ hg st --change tip --copies
M a
M c
A d
a
A g
b
R b
$ hg up tip -q
$ cat a
a
a
$ cat c
c
c
$ cat d
a
a
$ cat g
b
b
$ cd $TESTTMP
Test collapsing changes that add then remove a file
$ hg init collapseaddremove
$ cd collapseaddremove
$ touch base
$ hg commit -Am base
adding base
$ touch a
$ hg commit -Am a
adding a
$ hg rm a
$ touch b
$ hg commit -Am b
adding b
$ hg book foo
$ hg rebase -d 0 -r "1::2" --collapse -m collapsed
rebasing 1:6d8d9f24eec3 "a"
rebasing 2:1cc73eca5ecc "b" (foo tip)
$ hg log -G --template "{rev}: '{desc}' {bookmarks}"
@ 3: 'collapsed' foo
|
o 0: 'base'
$ hg manifest --rev tip
b
base
$ cd $TESTTMP
Test that rebase --collapse will remember message after
running into merge conflict and invoking rebase --continue.
$ hg init collapse_remember_message
$ cd collapse_remember_message
$ touch a
$ hg add a
$ hg commit -m "a"
$ echo "a-default" > a
$ hg commit -m "a-default"
$ hg update -r 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo "a-dev" > a
$ hg commit -m "a-dev"
$ hg rebase --collapse -m "a-default-dev" -d 1
rebasing 2:1fb04abbc715 "a-dev" (tip)
merging a
warning: 1 conflicts while merging a! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
[1]
$ rm a.orig
$ hg resolve --mark a
(no more unresolved files)
continue: hg rebase --continue
$ hg rebase --continue
rebasing 2:1fb04abbc715 "a-dev" (tip)
$ hg log
changeset: 3:3f6f2136305e
tag: tip
parent: 1:3c8db56a44bc
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a-default-dev
changeset: 1:3c8db56a44bc
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a-default
changeset: 0:3903775176ed
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: a
$ cd ..