[PATCH 17 of 17] rebase: preserve parent order when rebasing

Mads Kiilerich mads at kiilerich.com
Sun Nov 30 13:08:44 CST 2014


# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1417374421 -3600
#      Sun Nov 30 20:07:01 2014 +0100
# Node ID b1e2ea57d2690d7d82998db04ec05d891e899f64
# Parent  639a274a5bd418594c9ad21766bf59cb5fcb3758
rebase: preserve parent order when rebasing

If the original p1 was outside the rebase set, it would end up as p2. Keeping
it as p1 is more correct.

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -623,7 +623,7 @@ def computerebase(repo, rev, target, sta
                    p1'            p1'          p1',p2         p1',p2
 
     outside   target,rev|p1 target,rev|None  p2',rev|p2       abort
-                 target        target,p1       p2',p1       3 parents
+                 target        p1,target       p1,p2'       3 parents
     '''
     ctx = repo[rev]
 
@@ -687,10 +687,10 @@ def computerebase(repo, rev, target, sta
         return target, rev, p1, target, nullrev
     if p2 in targetancestors:
         repo.ui.debug(' p1 outside, p2 ancestor\n')
-        return target, rev, None, target, p1
+        return target, rev, None, p1, target
     if p2_ >= nullrev:
         repo.ui.debug(' p1 outside, p2 rebased\n')
-        return p2_, rev, p2, p2_, p1
+        return p2_, rev, p2, p1, p2_
     repo.ui.debug(' p1 outside, p2 outside\n')
     raise util.Abort(_('cannot use revision %d as base, result '
                        'would have 3 parents') % rev)
diff --git a/tests/test-rebase-conflicts.t b/tests/test-rebase-conflicts.t
--- a/tests/test-rebase-conflicts.t
+++ b/tests/test-rebase-conflicts.t
@@ -258,7 +258,7 @@ Check that the right ancestors is used w
   rebasing 10:2f2496ddf49d "merge" (tip)
   rebasing: 10:2f2496ddf49d 6/6 changesets (100.00%)
    p1 outside, p2 rebased
-   merging 11 and 10 using ancestor 9, setting parents 11 and 7
+   merging 11 and 10 using ancestor 9, setting parents 7 and 11
   rebase status stored
    already in target
    merge against 10:2f2496ddf49d
diff --git a/tests/test-rebase-newancestor.t b/tests/test-rebase-newancestor.t
--- a/tests/test-rebase-newancestor.t
+++ b/tests/test-rebase-newancestor.t
@@ -229,10 +229,10 @@ Test order of parents of rebased merged 
   rebasing 4:6990226659be "merge p1 3=outside p2 1=ancestor"
   saved backup bundle to $TESTTMP/parentorder/.hg/strip-backup/6990226659be-backup.hg (glob)
   $ hg tip
-  changeset:   5:cca50676b1c5
+  changeset:   5:ca24ade1b78e
   tag:         tip
+  parent:      3:f59da8fc0fcf
   parent:      2:a60552eb93fb
-  parent:      3:f59da8fc0fcf
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     merge p1 3=outside p2 1=ancestor


More information about the Mercurial-devel mailing list