[PATCH 2 of 3 STABLE?] filemerge: treat EOF at prompt as fail, not abort

Siddharth Agarwal sid0 at fb.com
Tue Nov 10 19:20:28 CST 2015


# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1447204396 28800
#      Tue Nov 10 17:13:16 2015 -0800
# Node ID 0829cdf6d0d3da14077f4de0d73c8bddf6190f06
# Parent  625d11b1fc9b3709335b885ccdd753e3062f1ab3
filemerge: treat EOF at prompt as fail, not abort

Previously we'd abort the merge entirely if there was an EOF at the prompt.
This is unnecessary -- it's much better to simply fail and treat the file as
unresolved instead.

diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -175,15 +175,19 @@ def _iprompt(repo, mynode, orig, fcd, fc
     ui = repo.ui
     fd = fcd.path()
 
-    index = ui.promptchoice(_(" no tool found to merge %s\n"
-                              "keep (l)ocal or take (o)ther?"
-                              "$$ &Local $$ &Other") % fd, 0)
-    choice = ['local', 'other'][index]
+    try:
+        index = ui.promptchoice(_(" no tool found to merge %s\n"
+                                  "keep (l)ocal or take (o)ther?"
+                                  "$$ &Local $$ &Other") % fd, 0)
+        choice = ['local', 'other'][index]
 
-    if choice == 'other':
-        return _iother(repo, mynode, orig, fcd, fco, fca, toolconf)
-    else:
-        return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf)
+        if choice == 'other':
+            return _iother(repo, mynode, orig, fcd, fco, fca, toolconf)
+        else:
+            return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf)
+    except error.ResponseExpected:
+        ui.write("\n")
+        return 1
 
 @internaltool('local', nomerge)
 def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf):
diff --git a/tests/test-merge-tools.t b/tests/test-merge-tools.t
--- a/tests/test-merge-tools.t
+++ b/tests/test-merge-tools.t
@@ -544,6 +544,41 @@ ui.merge specifies internal:prompt:
   # hg resolve --list
   R f
 
+prompt with EOF
+
+  $ beforemerge
+  [merge-tools]
+  false.whatever=
+  true.priority=1
+  true.executable=cat
+  # hg update -C 1
+  $ hg merge -r 2 --config ui.merge=internal:prompt --config ui.interactive=true
+   no tool found to merge f
+  keep (l)ocal or take (o)ther? 
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ aftermerge
+  # cat f
+  revision 1
+  space
+  # hg stat
+  M f
+  # hg resolve --list
+  U f
+  $ hg resolve --all --config ui.merge=internal:prompt --config ui.interactive=true
+   no tool found to merge f
+  keep (l)ocal or take (o)ther? 
+  [1]
+  $ aftermerge
+  # cat f
+  revision 1
+  space
+  # hg stat
+  M f
+  ? f.orig
+  # hg resolve --list
+  U f
 ui.merge specifies internal:dump:
 
   $ beforemerge


More information about the Mercurial-devel mailing list