# HG changeset patch # User Pierre-Yves David # Date 1545369299 -28800 # Node ID 8aa28e68ac4424636edbdc325bdc803aa3a2cda9 # Parent 604732387e33781694ab78abf7b65760f36b196d evolve: detect unresolved conflict during evolve --continue (issue5966) Evolve --continue was ignoring unresolved conflict, proceeding with its operation without any check. This is now fixed. This test case was built and formalized by Matt Harbison and Anton Shestakov. diff -r 604732387e33 -r 8aa28e68ac44 CHANGELOG --- a/CHANGELOG Fri Dec 21 19:48:01 2018 +0100 +++ b/CHANGELOG Fri Dec 21 13:14:59 2018 +0800 @@ -4,6 +4,7 @@ 8.3.3 - in progress ------------------- + * evolve: properly detect unresolved merge conflict (issue-5966) * evolve: fix possible crash when the repo changes during evolve (issue-6028) * test: avoid leaking `hg serve` process * topic: fix error message for the `ngtip` revset diff -r 604732387e33 -r 8aa28e68ac44 hgext3rd/evolve/evolvecmd.py --- a/hgext3rd/evolve/evolvecmd.py Fri Dec 21 19:48:01 2018 +0100 +++ b/hgext3rd/evolve/evolvecmd.py Fri Dec 21 13:14:59 2018 +0800 @@ -21,6 +21,7 @@ hg, lock as lockmod, merge, + mergeutil, node as nodemod, obsolete, obsutil, @@ -1729,6 +1730,8 @@ """logic for handling of `hg evolve --continue`""" with repo.wlock(), repo.lock(): + ms = merge.mergestate.read(repo) + mergeutil.checkunresolved(ms) if (evolvestate['command'] == 'next' or evolvestate['category'] == 'orphan'): _completeorphan(ui, repo, evolvestate) diff -r 604732387e33 -r 8aa28e68ac44 tests/test-evolve-issue5966.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-evolve-issue5966.t Fri Dec 21 13:14:59 2018 +0800 @@ -0,0 +1,115 @@ +Testing evolve --continue with unresolved conflicts (issue5966) +https://bz.mercurial-scm.org/show_bug.cgi?id=5966 + + $ . $TESTDIR/testlib/common.sh + + $ hg init issue5966 + $ cd issue5966 + $ cat > .hg/hgrc << EOF + > [phases] + > publish = false + > [alias] + > glog = log -GT "{rev}: {desc}" + > [extensions] + > evolve= + > EOF + + $ touch a + $ hg ci -Aqm 'empty' + + $ echo apple > a + $ hg ci -m 'apple' + $ echo banana > a + $ hg ci -m 'banana' + $ echo coconut > a + $ hg ci -m 'coconut' + + $ hg glog + @ 3: coconut + | + o 2: banana + | + o 1: apple + | + o 0: empty + + + $ hg up -q 1 + +Amending revision 1 in a way that causes conflicts + + $ echo apricot > a + $ hg amend -m 'apricot' + 2 new orphan changesets + + $ hg glog --hidden + @ 4: apricot + | + | * 3: coconut + | | + | * 2: banana + | | + | x 1: apple + |/ + o 0: empty + + + $ hg evolve -t :fail + move:[2] banana + atop:[4] apricot + fix conflicts and see `hg help evolve.interrupted` + [1] + $ hg evolve --list + 34a690fcf6ab: banana + orphan: 7f59f18ca4a9 (obsolete parent) + + feb8c0bffa1f: coconut + orphan: 34a690fcf6ab (orphan parent) + +Evolve should detect unresolved conflict. + + $ hg resolve --list + U a + $ hg evolve --continue + abort: unresolved merge conflicts (see 'hg help resolve') + [255] + +(even when ran twice) + + $ hg evolve --continue + abort: unresolved merge conflicts (see 'hg help resolve') + [255] + + $ cat a + apricot + $ hg resolve --list + U a + $ hg resolve a -t :other + (no more unresolved files) + continue: hg evolve --continue + $ hg resolve --list + R a + $ hg evolve --continue + evolving 2:34a690fcf6ab "banana" + working directory is now at e4207a610ed0 + $ hg resolve --list + +evolve the rest of the stack + + $ hg evolve + move:[3] coconut + atop:[5] banana + merging a + working directory is now at d77b4639fe26 + +All commit evolved + + $ hg glog + @ 6: coconut + | + o 5: banana + | + o 4: apricot + | + o 0: empty + diff -r 604732387e33 -r 8aa28e68ac44 tests/test-stabilize-result.t --- a/tests/test-stabilize-result.t Fri Dec 21 19:48:01 2018 +0100 +++ b/tests/test-stabilize-result.t Fri Dec 21 13:14:59 2018 +0800 @@ -93,7 +93,6 @@ +a +newer a $ hg evolve --continue - evolving 4:3655f0f50885 "newer a" abort: unresolved merge conflicts (see 'hg help resolve') [255] $ hg resolve -m a