changeset 34504:8cef8f7d51d0

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
author Jun Wu <quark@fb.com>
date Thu, 05 Oct 2017 20:41:50 -0700
parents 0d5a1175d0f9
children 91250ff7d48a
files tests/test-rebase-base-flag.t tests/test-rebase-base.t tests/test-rebase-transaction.t
diffstat 3 files changed, 433 insertions(+), 418 deletions(-) [+]
line wrap: on
line diff
--- /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 ..