mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
87f820de49
"defineparents" is the core algorithm of rebase. The old code has too many tech debts (like outdated comments, confusing assertions, etc) and is very error-prone to be improved. This patch rewrites "defineparents" to make the code easier to reason about, and solve a bunch of issues, including: - Assertion error: no base found (demonstrated by D212, issue5578) - Asymmetric result (demonstrated by D211, "F with one parent") - Wrong new parent (demonstrated by D262, "C':A'A'") - "revlog index out of range" (demonstrated by D262, issue5630) - "nothing to merge" (demonstrated by D262) As a side effect, merge base decision has been made more solid - rebase now prints out explicitly what could go wrong when it cannot find a unique suitable merge base. .. fix:: Issue 5578, Issue 5630 Core rebase algorithm has been rewritten to be more robust. Differential Revision: https://phab.mercurial-scm.org/D21
56 lines
1.1 KiB
Perl
56 lines
1.1 KiB
Perl
$ cat >> $HGRCPATH <<EOF
|
|
> [extensions]
|
|
> drawdag=$TESTDIR/drawdag.py
|
|
> bruterebase=$TESTDIR/bruterebase.py
|
|
> [experimental]
|
|
> evolution=createmarkers,allowunstable
|
|
> EOF
|
|
$ init() {
|
|
> N=`expr ${N:-0} + 1`
|
|
> cd $TESTTMP && hg init repo$N && cd repo$N
|
|
> hg debugdrawdag
|
|
> }
|
|
|
|
Source looks like "N"
|
|
|
|
$ init <<'EOS'
|
|
> C D
|
|
> |\|
|
|
> A B Z
|
|
> EOS
|
|
|
|
$ hg debugbruterebase 'all()-Z' Z
|
|
A: A':Z
|
|
B: B':Z
|
|
AB: A':Z B':Z
|
|
C: ABORT: cannot use revision 3 as base, result would have 3 parents
|
|
AC: A':Z C':A'B
|
|
BC: B':Z C':B'A
|
|
ABC: A':Z B':Z C':A'B'
|
|
D: D':Z
|
|
AD: A':Z D':Z
|
|
BD: B':Z D':B'
|
|
ABD: A':Z B':Z D':B'
|
|
CD: ABORT: cannot use revision 3 as base, result would have 3 parents
|
|
ACD: A':Z C':A'B D':Z
|
|
BCD: B':Z C':B'A D':B'
|
|
ABCD: A':Z B':Z C':A'B' D':B'
|
|
|
|
Moving backwards
|
|
|
|
$ init <<'EOS'
|
|
> C
|
|
> |\
|
|
> A B
|
|
> |
|
|
> Z
|
|
> EOS
|
|
$ hg debugbruterebase 'all()-Z' Z
|
|
B: B':Z
|
|
A:
|
|
BA: B':Z
|
|
C: ABORT: cannot use revision 3 as base, result would have 3 parents
|
|
BC: B':Z C':B'A
|
|
AC:
|
|
BAC: B':Z C':B'A
|