# HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1528920573 -19800 # Node ID 340cf6fbe9e9575d5ee5847c26344838c4600820 # Parent a17d4934c5ce348ae05307047df99c8676df7d46 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. diff -r a17d4934c5ce -r 340cf6fbe9e9 hgext3rd/evolve/evolvecmd.py --- 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() diff -r a17d4934c5ce -r 340cf6fbe9e9 tests/test-evolve-content-divergence.t --- 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