# HG changeset patch # User Siddharth Agarwal # Date 1447204396 28800 # Node ID 33eb8a56d0c993bce4bda8f07325d49f6fa40dd0 # Parent da1c706c9a35f3c120e89fb59d72b175eff71888 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 -r da1c706c9a35 -r 33eb8a56d0c9 mercurial/filemerge.py --- a/mercurial/filemerge.py Tue Nov 10 17:10:47 2015 -0800 +++ b/mercurial/filemerge.py Tue Nov 10 17:13:16 2015 -0800 @@ -175,15 +175,19 @@ 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 -r da1c706c9a35 -r 33eb8a56d0c9 tests/test-merge-tools.t --- a/tests/test-merge-tools.t Tue Nov 10 17:10:47 2015 -0800 +++ b/tests/test-merge-tools.t Tue Nov 10 17:13:16 2015 -0800 @@ -544,6 +544,41 @@ # 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