test-rebase-base: clarify it is about the "--base" flag
It happened several times that people use `test-rebase-base.t` as a general
purposed test file for rebase. But it is intended to be only related to the
`--base` flag. This patch split, renamed the test, and added a note to
clarify.
Differential Revision: https://phab.mercurial-scm.org/D975
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rebase-base-flag.t Thu Oct 05 20:41:50 2017 -0700
@@ -0,0 +1,384 @@
+Test the "--base" flag of the rebase command. (Tests unrelated to the "--base"
+flag should probably live in somewhere else)
+
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > rebase=
+ > drawdag=$TESTDIR/drawdag.py
+ >
+ > [phases]
+ > publish=False
+ >
+ > [alias]
+ > tglog = log -G --template "{rev}: {desc}"
+ > EOF
+
+ $ rebasewithdag() {
+ > N=`$PYTHON -c "print($N+1)"`
+ > hg init repo$N && cd repo$N
+ > hg debugdrawdag
+ > hg rebase "$@" > _rebasetmp
+ > r=$?
+ > grep -v 'saved backup bundle' _rebasetmp
+ > [ $r -eq 0 ] && hg tglog
+ > cd ..
+ > return $r
+ > }
+
+Single branching point, without merge:
+
+ $ rebasewithdag -b D -d Z <<'EOS'
+ > D E
+ > |/
+ > Z B C # C: branching point, E should be picked
+ > \|/ # B should not be picked
+ > A
+ > |
+ > R
+ > EOS
+ rebasing 3:d6003a550c2c "C" (C)
+ rebasing 5:4526cf523425 "D" (D)
+ rebasing 6:b296604d9846 "E" (E tip)
+ o 6: E
+ |
+ | o 5: D
+ |/
+ o 4: C
+ |
+ o 3: Z
+ |
+ | o 2: B
+ |/
+ o 1: A
+ |
+ o 0: R
+
+Multiple branching points caused by selecting a single merge changeset:
+
+ $ rebasewithdag -b E -d Z <<'EOS'
+ > E
+ > /|
+ > B C D # B, C: multiple branching points
+ > | |/ # D should not be picked
+ > Z | /
+ > \|/
+ > A
+ > |
+ > R
+ > EOS
+ rebasing 2:c1e6b162678d "B" (B)
+ rebasing 3:d6003a550c2c "C" (C)
+ rebasing 6:54c8f00cb91c "E" (E tip)
+ o 6: E
+ |\
+ | o 5: C
+ | |
+ o | 4: B
+ |/
+ o 3: Z
+ |
+ | o 2: D
+ |/
+ o 1: A
+ |
+ o 0: R
+
+Rebase should not extend the "--base" revset using "descendants":
+
+ $ rebasewithdag -b B -d Z <<'EOS'
+ > E
+ > /|
+ > Z B C # descendants(B) = B+E. With E, C will be included incorrectly
+ > \|/
+ > A
+ > |
+ > R
+ > EOS
+ rebasing 2:c1e6b162678d "B" (B)
+ rebasing 5:54c8f00cb91c "E" (E tip)
+ o 5: E
+ |\
+ | o 4: B
+ | |
+ | o 3: Z
+ | |
+ o | 2: C
+ |/
+ o 1: A
+ |
+ o 0: R
+
+Rebase should not simplify the "--base" revset using "roots":
+
+ $ rebasewithdag -b B+E -d Z <<'EOS'
+ > E
+ > /|
+ > Z B C # roots(B+E) = B. Without E, C will be missed incorrectly
+ > \|/
+ > A
+ > |
+ > R
+ > EOS
+ rebasing 2:c1e6b162678d "B" (B)
+ rebasing 3:d6003a550c2c "C" (C)
+ rebasing 5:54c8f00cb91c "E" (E tip)
+ o 5: E
+ |\
+ | o 4: C
+ | |
+ o | 3: B
+ |/
+ o 2: Z
+ |
+ o 1: A
+ |
+ o 0: R
+
+The destination is one of the two branching points of a merge:
+
+ $ rebasewithdag -b F -d Z <<'EOS'
+ > F
+ > / \
+ > E D
+ > / /
+ > Z C
+ > \ /
+ > B
+ > |
+ > A
+ > EOS
+ nothing to rebase
+ [1]
+
+Multiple branching points caused by multiple bases (issue5420):
+
+ $ rebasewithdag -b E1+E2+C2+B1 -d Z <<'EOS'
+ > Z E2
+ > | /
+ > F E1 C2
+ > |/ /
+ > E C1 B2
+ > |/ /
+ > C B1
+ > |/
+ > B
+ > |
+ > A
+ > |
+ > R
+ > EOS
+ rebasing 3:a113dbaa660a "B1" (B1)
+ rebasing 5:06ce7b1cc8c2 "B2" (B2)
+ rebasing 6:0ac98cce32d3 "C1" (C1)
+ rebasing 8:781512f5e33d "C2" (C2)
+ rebasing 9:428d8c18f641 "E1" (E1)
+ rebasing 11:e1bf82f6b6df "E2" (E2)
+ o 12: E2
+ |
+ o 11: E1
+ |
+ | o 10: C2
+ | |
+ | o 9: C1
+ |/
+ | o 8: B2
+ | |
+ | o 7: B1
+ |/
+ o 6: Z
+ |
+ o 5: F
+ |
+ o 4: E
+ |
+ o 3: C
+ |
+ o 2: B
+ |
+ o 1: A
+ |
+ o 0: R
+
+Multiple branching points with multiple merges:
+
+ $ rebasewithdag -b G+P -d Z <<'EOS'
+ > G H P
+ > |\ /| |\
+ > F E D M N
+ > \|/| /| |\
+ > Z C B I J K L
+ > \|/ |/ |/
+ > A A A
+ > EOS
+ rebasing 2:dc0947a82db8 "C" (C)
+ rebasing 8:4e4f9194f9f1 "D" (D)
+ rebasing 9:03ca77807e91 "E" (E)
+ rebasing 10:afc707c82df0 "F" (F)
+ rebasing 13:690dfff91e9e "G" (G)
+ rebasing 14:2893b886bb10 "H" (H)
+ rebasing 3:08ebfeb61bac "I" (I)
+ rebasing 4:a0a5005cec67 "J" (J)
+ rebasing 5:83780307a7e8 "K" (K)
+ rebasing 6:e131637a1cb6 "L" (L)
+ rebasing 11:d1f6d0c3c7e4 "M" (M)
+ rebasing 12:7aaec6f81888 "N" (N)
+ rebasing 15:325bc8f1760d "P" (P tip)
+ o 15: P
+ |\
+ | o 14: N
+ | |\
+ o \ \ 13: M
+ |\ \ \
+ | | | o 12: L
+ | | | |
+ | | o | 11: K
+ | | |/
+ | o / 10: J
+ | |/
+ o / 9: I
+ |/
+ | o 8: H
+ | |\
+ | | | o 7: G
+ | | |/|
+ | | | o 6: F
+ | | | |
+ | | o | 5: E
+ | | |/
+ | o | 4: D
+ | |\|
+ +---o 3: C
+ | |
+ o | 2: Z
+ | |
+ | o 1: B
+ |/
+ o 0: A
+
+Slightly more complex merge case (mentioned in https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/091074.html):
+
+ $ rebasewithdag -b A3+B3 -d Z <<'EOF'
+ > Z C1 A3 B3
+ > | / / \ / \
+ > M3 C0 A1 A2 B1 B2
+ > | / | | | |
+ > M2 M1 C1 C1 M3
+ > |
+ > M1
+ > |
+ > M0
+ > EOF
+ rebasing 4:8817fae53c94 "C0" (C0)
+ rebasing 6:06ca5dfe3b5b "B2" (B2)
+ rebasing 7:73508237b032 "C1" (C1)
+ rebasing 9:fdb955e2faed "A2" (A2)
+ rebasing 11:4e449bd1a643 "A3" (A3)
+ rebasing 10:0a33b0519128 "B1" (B1)
+ rebasing 12:209327807c3a "B3" (B3 tip)
+ o 12: B3
+ |\
+ | o 11: B1
+ | |
+ | | o 10: A3
+ | | |\
+ | +---o 9: A2
+ | | |
+ | o | 8: C1
+ | | |
+ o | | 7: B2
+ | | |
+ | o | 6: C0
+ |/ /
+ o | 5: Z
+ | |
+ o | 4: M3
+ | |
+ o | 3: M2
+ | |
+ | o 2: A1
+ |/
+ o 1: M1
+ |
+ o 0: M0
+
+Disconnected graph:
+
+ $ rebasewithdag -b B -d Z <<'EOS'
+ > B
+ > |
+ > Z A
+ > EOS
+ nothing to rebase from 112478962961 to 48b9aae0607f
+ [1]
+
+Multiple roots. Roots are ancestors of dest:
+
+ $ rebasewithdag -b B+D -d Z <<'EOF'
+ > D Z B
+ > \|\|
+ > C A
+ > EOF
+ rebasing 2:112478962961 "B" (B)
+ rebasing 3:b70f76719894 "D" (D)
+ o 4: D
+ |
+ | o 3: B
+ |/
+ o 2: Z
+ |\
+ | o 1: C
+ |
+ o 0: A
+
+Multiple roots. One root is not an ancestor of dest:
+
+ $ rebasewithdag -b B+D -d Z <<'EOF'
+ > Z B D
+ > \|\|
+ > A C
+ > EOF
+ nothing to rebase from f675d5a1c6a4+b70f76719894 to 262e37e34f63
+ [1]
+
+Multiple roots. One root is not an ancestor of dest. Select using a merge:
+
+ $ rebasewithdag -b E -d Z <<'EOF'
+ > E
+ > |\
+ > Z B D
+ > \|\|
+ > A C
+ > EOF
+ rebasing 2:f675d5a1c6a4 "B" (B)
+ rebasing 5:f68696fe6af8 "E" (E tip)
+ o 5: E
+ |\
+ | o 4: B
+ | |\
+ | | o 3: Z
+ | | |
+ o | | 2: D
+ |/ /
+ o / 1: C
+ /
+ o 0: A
+
+Multiple roots. Two children share two parents while dest has only one parent:
+
+ $ rebasewithdag -b B+D -d Z <<'EOF'
+ > Z B D
+ > \|\|\
+ > A C A
+ > EOF
+ rebasing 2:f675d5a1c6a4 "B" (B)
+ rebasing 3:c2a779e13b56 "D" (D)
+ o 4: D
+ |\
+ +---o 3: B
+ | |/
+ | o 2: Z
+ | |
+ o | 1: C
+ /
+ o 0: A
+
--- a/tests/test-rebase-base.t Fri Jun 30 03:36:10 2017 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,418 +0,0 @@
- $ cat >> $HGRCPATH <<EOF
- > [extensions]
- > rebase=
- > drawdag=$TESTDIR/drawdag.py
- >
- > [phases]
- > publish=False
- >
- > [alias]
- > tglog = log -G --template "{rev}: {desc}"
- > EOF
-
- $ rebasewithdag() {
- > N=`$PYTHON -c "print($N+1)"`
- > hg init repo$N && cd repo$N
- > hg debugdrawdag
- > hg rebase "$@" > _rebasetmp
- > r=$?
- > grep -v 'saved backup bundle' _rebasetmp
- > [ $r -eq 0 ] && hg tglog
- > cd ..
- > return $r
- > }
-
-Single branching point, without merge:
-
- $ rebasewithdag -b D -d Z <<'EOS'
- > D E
- > |/
- > Z B C # C: branching point, E should be picked
- > \|/ # B should not be picked
- > A
- > |
- > R
- > EOS
- rebasing 3:d6003a550c2c "C" (C)
- rebasing 5:4526cf523425 "D" (D)
- rebasing 6:b296604d9846 "E" (E tip)
- o 6: E
- |
- | o 5: D
- |/
- o 4: C
- |
- o 3: Z
- |
- | o 2: B
- |/
- o 1: A
- |
- o 0: R
-
-Multiple branching points caused by selecting a single merge changeset:
-
- $ rebasewithdag -b E -d Z <<'EOS'
- > E
- > /|
- > B C D # B, C: multiple branching points
- > | |/ # D should not be picked
- > Z | /
- > \|/
- > A
- > |
- > R
- > EOS
- rebasing 2:c1e6b162678d "B" (B)
- rebasing 3:d6003a550c2c "C" (C)
- rebasing 6:54c8f00cb91c "E" (E tip)
- o 6: E
- |\
- | o 5: C
- | |
- o | 4: B
- |/
- o 3: Z
- |
- | o 2: D
- |/
- o 1: A
- |
- o 0: R
-
-Rebase should not extend the "--base" revset using "descendants":
-
- $ rebasewithdag -b B -d Z <<'EOS'
- > E
- > /|
- > Z B C # descendants(B) = B+E. With E, C will be included incorrectly
- > \|/
- > A
- > |
- > R
- > EOS
- rebasing 2:c1e6b162678d "B" (B)
- rebasing 5:54c8f00cb91c "E" (E tip)
- o 5: E
- |\
- | o 4: B
- | |
- | o 3: Z
- | |
- o | 2: C
- |/
- o 1: A
- |
- o 0: R
-
-Rebase should not simplify the "--base" revset using "roots":
-
- $ rebasewithdag -b B+E -d Z <<'EOS'
- > E
- > /|
- > Z B C # roots(B+E) = B. Without E, C will be missed incorrectly
- > \|/
- > A
- > |
- > R
- > EOS
- rebasing 2:c1e6b162678d "B" (B)
- rebasing 3:d6003a550c2c "C" (C)
- rebasing 5:54c8f00cb91c "E" (E tip)
- o 5: E
- |\
- | o 4: C
- | |
- o | 3: B
- |/
- o 2: Z
- |
- o 1: A
- |
- o 0: R
-
-The destination is one of the two branching points of a merge:
-
- $ rebasewithdag -b F -d Z <<'EOS'
- > F
- > / \
- > E D
- > / /
- > Z C
- > \ /
- > B
- > |
- > A
- > EOS
- nothing to rebase
- [1]
-
-Multiple branching points caused by multiple bases (issue5420):
-
- $ rebasewithdag -b E1+E2+C2+B1 -d Z <<'EOS'
- > Z E2
- > | /
- > F E1 C2
- > |/ /
- > E C1 B2
- > |/ /
- > C B1
- > |/
- > B
- > |
- > A
- > |
- > R
- > EOS
- rebasing 3:a113dbaa660a "B1" (B1)
- rebasing 5:06ce7b1cc8c2 "B2" (B2)
- rebasing 6:0ac98cce32d3 "C1" (C1)
- rebasing 8:781512f5e33d "C2" (C2)
- rebasing 9:428d8c18f641 "E1" (E1)
- rebasing 11:e1bf82f6b6df "E2" (E2)
- o 12: E2
- |
- o 11: E1
- |
- | o 10: C2
- | |
- | o 9: C1
- |/
- | o 8: B2
- | |
- | o 7: B1
- |/
- o 6: Z
- |
- o 5: F
- |
- o 4: E
- |
- o 3: C
- |
- o 2: B
- |
- o 1: A
- |
- o 0: R
-
-Multiple branching points with multiple merges:
-
- $ rebasewithdag -b G+P -d Z <<'EOS'
- > G H P
- > |\ /| |\
- > F E D M N
- > \|/| /| |\
- > Z C B I J K L
- > \|/ |/ |/
- > A A A
- > EOS
- rebasing 2:dc0947a82db8 "C" (C)
- rebasing 8:4e4f9194f9f1 "D" (D)
- rebasing 9:03ca77807e91 "E" (E)
- rebasing 10:afc707c82df0 "F" (F)
- rebasing 13:690dfff91e9e "G" (G)
- rebasing 14:2893b886bb10 "H" (H)
- rebasing 3:08ebfeb61bac "I" (I)
- rebasing 4:a0a5005cec67 "J" (J)
- rebasing 5:83780307a7e8 "K" (K)
- rebasing 6:e131637a1cb6 "L" (L)
- rebasing 11:d1f6d0c3c7e4 "M" (M)
- rebasing 12:7aaec6f81888 "N" (N)
- rebasing 15:325bc8f1760d "P" (P tip)
- o 15: P
- |\
- | o 14: N
- | |\
- o \ \ 13: M
- |\ \ \
- | | | o 12: L
- | | | |
- | | o | 11: K
- | | |/
- | o / 10: J
- | |/
- o / 9: I
- |/
- | o 8: H
- | |\
- | | | o 7: G
- | | |/|
- | | | o 6: F
- | | | |
- | | o | 5: E
- | | |/
- | o | 4: D
- | |\|
- +---o 3: C
- | |
- o | 2: Z
- | |
- | o 1: B
- |/
- o 0: A
-
-Slightly more complex merge case (mentioned in https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-November/091074.html):
-
- $ rebasewithdag -b A3+B3 -d Z <<'EOF'
- > Z C1 A3 B3
- > | / / \ / \
- > M3 C0 A1 A2 B1 B2
- > | / | | | |
- > M2 M1 C1 C1 M3
- > |
- > M1
- > |
- > M0
- > EOF
- rebasing 4:8817fae53c94 "C0" (C0)
- rebasing 6:06ca5dfe3b5b "B2" (B2)
- rebasing 7:73508237b032 "C1" (C1)
- rebasing 9:fdb955e2faed "A2" (A2)
- rebasing 11:4e449bd1a643 "A3" (A3)
- rebasing 10:0a33b0519128 "B1" (B1)
- rebasing 12:209327807c3a "B3" (B3 tip)
- o 12: B3
- |\
- | o 11: B1
- | |
- | | o 10: A3
- | | |\
- | +---o 9: A2
- | | |
- | o | 8: C1
- | | |
- o | | 7: B2
- | | |
- | o | 6: C0
- |/ /
- o | 5: Z
- | |
- o | 4: M3
- | |
- o | 3: M2
- | |
- | o 2: A1
- |/
- o 1: M1
- |
- o 0: M0
-
-Disconnected graph:
-
- $ rebasewithdag -b B -d Z <<'EOS'
- > B
- > |
- > Z A
- > EOS
- nothing to rebase from 112478962961 to 48b9aae0607f
- [1]
-
-Multiple roots. Roots are ancestors of dest:
-
- $ rebasewithdag -b B+D -d Z <<'EOF'
- > D Z B
- > \|\|
- > C A
- > EOF
- rebasing 2:112478962961 "B" (B)
- rebasing 3:b70f76719894 "D" (D)
- o 4: D
- |
- | o 3: B
- |/
- o 2: Z
- |\
- | o 1: C
- |
- o 0: A
-
-Multiple roots. One root is not an ancestor of dest:
-
- $ rebasewithdag -b B+D -d Z <<'EOF'
- > Z B D
- > \|\|
- > A C
- > EOF
- nothing to rebase from f675d5a1c6a4+b70f76719894 to 262e37e34f63
- [1]
-
-Multiple roots. One root is not an ancestor of dest. Select using a merge:
-
- $ rebasewithdag -b E -d Z <<'EOF'
- > E
- > |\
- > Z B D
- > \|\|
- > A C
- > EOF
- rebasing 2:f675d5a1c6a4 "B" (B)
- rebasing 5:f68696fe6af8 "E" (E tip)
- o 5: E
- |\
- | o 4: B
- | |\
- | | o 3: Z
- | | |
- o | | 2: D
- |/ /
- o / 1: C
- /
- o 0: A
-
-Multiple roots. Two children share two parents while dest has only one parent:
-
- $ rebasewithdag -b B+D -d Z <<'EOF'
- > Z B D
- > \|\|\
- > A C A
- > EOF
- rebasing 2:f675d5a1c6a4 "B" (B)
- rebasing 3:c2a779e13b56 "D" (D)
- o 4: D
- |\
- +---o 3: B
- | |/
- | o 2: Z
- | |
- o | 1: C
- /
- o 0: A
-
-Rebasing using a single transaction
-
- $ hg init singletr && cd singletr
- $ cat >> .hg/hgrc <<EOF
- > [rebase]
- > singletransaction=True
- > EOF
- $ hg debugdrawdag <<'EOF'
- > Z
- > |
- > | D
- > | |
- > | C
- > | |
- > Y B
- > |/
- > A
- > EOF
-- We should only see two status stored messages. One from the start, one from
-- the end.
- $ hg rebase --debug -b D -d Z | grep 'status stored'
- rebase status stored
- rebase status stored
- $ hg tglog
- o 5: D
- |
- o 4: C
- |
- o 3: B
- |
- o 2: Z
- |
- o 1: Y
- |
- o 0: A
-
- $ cd ..
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rebase-transaction.t Thu Oct 05 20:41:50 2017 -0700
@@ -0,0 +1,49 @@
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > rebase=
+ > drawdag=$TESTDIR/drawdag.py
+ >
+ > [phases]
+ > publish=False
+ >
+ > [alias]
+ > tglog = log -G --template "{rev}: {desc}"
+ > EOF
+
+Rebasing using a single transaction
+
+ $ hg init singletr && cd singletr
+ $ cat >> .hg/hgrc <<EOF
+ > [rebase]
+ > singletransaction=True
+ > EOF
+ $ hg debugdrawdag <<'EOF'
+ > Z
+ > |
+ > | D
+ > | |
+ > | C
+ > | |
+ > Y B
+ > |/
+ > A
+ > EOF
+- We should only see two status stored messages. One from the start, one from
+- the end.
+ $ hg rebase --debug -b D -d Z | grep 'status stored'
+ rebase status stored
+ rebase status stored
+ $ hg tglog
+ o 5: D
+ |
+ o 4: C
+ |
+ o 3: B
+ |
+ o 2: Z
+ |
+ o 1: Y
+ |
+ o 0: A
+
+ $ cd ..