# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@octobus.net>
# Date 1545369299 -28800
#      Fri Dec 21 13:14:59 2018 +0800
# Branch stable
# 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 --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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 --git a/hgext3rd/evolve/evolvecmd.py b/hgext3rd/evolve/evolvecmd.py
--- a/hgext3rd/evolve/evolvecmd.py
+++ b/hgext3rd/evolve/evolvecmd.py
@@ -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 --git a/tests/test-evolve-issue5966.t b/tests/test-evolve-issue5966.t
new file mode 100644
--- /dev/null
+++ b/tests/test-evolve-issue5966.t
@@ -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 --git a/tests/test-stabilize-result.t b/tests/test-stabilize-result.t
--- a/tests/test-stabilize-result.t
+++ b/tests/test-stabilize-result.t
@@ -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