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.
--- 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