evolve: create resolved cset on successors of current parents
authorPulkit Goyal <7895pulkit@gmail.com>
Thu, 14 Jun 2018 01:39:33 +0530
changeset 3850 340cf6fbe9e9
parent 3849 a17d4934c5ce
child 3851 9ebed1e95ef7
evolve: create resolved cset on successors of current parents While resolving content-divergence, sometimes, the parent can be obsolete and have a successor. We should consider the successors of the parents instead of obsolete parents as that will do something like orphan+content-divergence resolution both at the same time which is powerful and results in a single stack while resolving content-divergence of stacks. The test changes demonstrates that we can now successfully evolve a content divergent stack.
hgext3rd/evolve/evolvecmd.py
tests/test-evolve-content-divergence.t
--- a/hgext3rd/evolve/evolvecmd.py	Thu Jun 14 01:39:11 2018 +0530
+++ b/hgext3rd/evolve/evolvecmd.py	Thu Jun 14 01:39:33 2018 +0530
@@ -386,6 +386,17 @@
     otherp1 = other.p1().rev()
     divp1 = divergent.p1().rev()
 
+    # finding single successors of otherp1 and divp1
+    try:
+        otherp1 = utility._singlesuccessor(repo, other.p1())
+    except utility.MultipleSuccessorsError:
+        pass
+
+    try:
+        divp1 = utility._singlesuccessor(repo, divergent.p1())
+    except utility.MultipleSuccessorsError:
+        pass
+
     # the changeset on which resolution changeset will be based on
     resolutionparent = repo[divp1].node()
 
--- a/tests/test-evolve-content-divergence.t	Thu Jun 14 01:39:11 2018 +0530
+++ b/tests/test-evolve-content-divergence.t	Thu Jun 14 01:39:33 2018 +0530
@@ -876,50 +876,34 @@
   merging "other" content-divergent changeset '82b74d5dc678'
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   6 new orphan changesets
-  skipping d5f148423c16: have a different parent than 88516dccf68a (not handled yet)
-  | d5f148423c16, 88516dccf68a are not based on the same changeset.
-  | With the current state of its implementation, 
-  | evolve does not work in that case.
-  | rebase one of them next to the other and run 
-  | this command again.
-  | - either: hg rebase --dest 'p1(d5f148423c16)' -r 88516dccf68a
-  | - or:     hg rebase --dest 'p1(88516dccf68a)' -r d5f148423c16
-  skipping 3ce4be6d8e5e: have a different parent than 9e5fb1d5b955 (not handled yet)
-  | 3ce4be6d8e5e, 9e5fb1d5b955 are not based on the same changeset.
-  | With the current state of its implementation, 
-  | evolve does not work in that case.
-  | rebase one of them next to the other and run 
-  | this command again.
-  | - either: hg rebase --dest 'p1(3ce4be6d8e5e)' -r 9e5fb1d5b955
-  | - or:     hg rebase --dest 'p1(9e5fb1d5b955)' -r 3ce4be6d8e5e
-  skipping c72d2885eb51: have a different parent than 15c781f93cac (not handled yet)
-  | c72d2885eb51, 15c781f93cac are not based on the same changeset.
-  | With the current state of its implementation, 
-  | evolve does not work in that case.
-  | rebase one of them next to the other and run 
-  | this command again.
-  | - either: hg rebase --dest 'p1(c72d2885eb51)' -r 15c781f93cac
-  | - or:     hg rebase --dest 'p1(15c781f93cac)' -r c72d2885eb51
-  working directory is now at f66f262fff6c
+  merge:[6] added b
+  with: [10] added b
+  base: [2] added b
+  updating to "local" side of the conflict: d5f148423c16
+  merging "other" content-divergent changeset '88516dccf68a'
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  merge:[7] added c
+  with: [11] added c
+  base: [3] added c
+  updating to "local" side of the conflict: 3ce4be6d8e5e
+  merging "other" content-divergent changeset '9e5fb1d5b955'
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  merge:[8] added d
+  with: [12] added d
+  base: [4] added d
+  updating to "local" side of the conflict: c72d2885eb51
+  merging "other" content-divergent changeset '15c781f93cac'
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory is now at 038fe7db3d88
 
   $ hg glog
-  @  13:f66f262fff6c watbar to a
+  @  16:038fe7db3d88 added d
+  |   () [default] draft
+  o  15:b2cac10f3836 added c
   |   () [default] draft
-  | *  12:15c781f93cac added d
-  | |   () [default] draft
-  | *  11:9e5fb1d5b955 added c
-  | |   () [default] draft
-  | *  10:88516dccf68a added b
-  | |   () [default] draft
-  | x  9:82b74d5dc678 watbar to a
-  |/    () [default] draft
-  | *  8:c72d2885eb51 added d
-  | |   () [default] draft
-  | *  7:3ce4be6d8e5e added c
-  | |   () [default] draft
-  | *  6:d5f148423c16 added b
-  | |   () [default] draft
-  | x  5:8e222f257bbf watbar to a
-  |/    () [default] draft
+  o  14:eadfd9d70680 added b
+  |   () [default] draft
+  o  13:f66f262fff6c watbar to a
+  |   () [default] draft
   o  0:8fa14d15e168 added hgignore
       () [default] draft