Mercurial > hg
view tests/test-rebase-base.t @ 33611:a2b55ee62803 stable
tests: make pdiff return appropriate exit code at comparison of files
Before this patch, pdiff script returns 0, even if diff is detected.
This issue doesn't cause failure of tests using it, if it is invoked
via extdiff extension, because extdiff itself examines changes between
specified revisions and decides exit code.
BTW, this patch ignores recursive comparison case, because:
- there is no portable way for current while-read based
implementation to return 1 at detecting changes
- it isn't yet needed to replace direct "diff -r" invocation by
pdiff for portability
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Mon, 31 Jul 2017 13:10:19 +0900 |
parents | 0103e7187237 |
children | 609606d21765 |
line wrap: on
line source
$ 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