--- a/mercurial/filemerge.py Tue Aug 09 09:15:46 2016 -0700
+++ b/mercurial/filemerge.py Fri Aug 12 06:01:42 2016 -0700
@@ -230,50 +230,56 @@
util.writefile(file, newdata)
@internaltool('prompt', nomerge)
-def _iprompt(repo, mynode, orig, fcd, fco, fca, toolconf):
+def _iprompt(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
"""Asks the user which of the local `p1()` or the other `p2()` version to
keep as the merged version."""
ui = repo.ui
fd = fcd.path()
+ prompts = partextras(labels)
+ prompts['fd'] = fd
try:
if fco.isabsent():
index = ui.promptchoice(
- _("local changed %s which remote deleted\n"
+ _("local%(l)s changed %(fd)s which remote%(o)s deleted\n"
"use (c)hanged version, (d)elete, or leave (u)nresolved?"
- "$$ &Changed $$ &Delete $$ &Unresolved") % fd, 2)
+ "$$ &Changed $$ &Delete $$ &Unresolved") % prompts, 2)
choice = ['local', 'other', 'unresolved'][index]
elif fcd.isabsent():
index = ui.promptchoice(
- _("remote changed %s which local deleted\n"
+ _("remote%(o)s changed %(fd)s which local%(l)s deleted\n"
"use (c)hanged version, leave (d)eleted, or "
"leave (u)nresolved?"
- "$$ &Changed $$ &Deleted $$ &Unresolved") % fd, 2)
+ "$$ &Changed $$ &Deleted $$ &Unresolved") % prompts, 2)
choice = ['other', 'local', 'unresolved'][index]
else:
index = ui.promptchoice(
- _("no tool found to merge %s\n"
- "keep (l)ocal, take (o)ther, or leave (u)nresolved?"
- "$$ &Local $$ &Other $$ &Unresolved") % fd, 2)
+ _("no tool found to merge %(fd)s\n"
+ "keep (l)ocal%(l)s, take (o)ther%(o)s, or leave (u)nresolved?"
+ "$$ &Local $$ &Other $$ &Unresolved") % prompts, 2)
choice = ['local', 'other', 'unresolved'][index]
if choice == 'other':
- return _iother(repo, mynode, orig, fcd, fco, fca, toolconf)
+ return _iother(repo, mynode, orig, fcd, fco, fca, toolconf,
+ labels)
elif choice == 'local':
- return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf)
+ return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf,
+ labels)
elif choice == 'unresolved':
- return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf)
+ return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf,
+ labels)
except error.ResponseExpected:
ui.write("\n")
- return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf)
+ return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf,
+ labels)
@internaltool('local', nomerge)
-def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf):
+def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
"""Uses the local `p1()` version of files as the merged version."""
return 0, fcd.isabsent()
@internaltool('other', nomerge)
-def _iother(repo, mynode, orig, fcd, fco, fca, toolconf):
+def _iother(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
"""Uses the other `p2()` version of files as the merged version."""
if fco.isabsent():
# local changed, remote deleted -- 'deleted' picked
@@ -285,7 +291,7 @@
return 0, deleted
@internaltool('fail', nomerge)
-def _ifail(repo, mynode, orig, fcd, fco, fca, toolconf):
+def _ifail(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
"""
Rather than attempting to merge files that were modified on both
branches, it marks them as unresolved. The resolve command must be
@@ -537,6 +543,22 @@
newlabels.append(_formatconflictmarker(repo, ca, tmpl, labels[2], pad))
return newlabels
+def partextras(labels):
+ """Return a dictionary of extra labels for use in prompts to the user
+
+ Intended use is in strings of the form "(l)ocal%(l)s".
+ """
+ if labels is None:
+ return {
+ "l": "",
+ "o": "",
+ }
+
+ return {
+ "l": " [%s]" % labels[0],
+ "o": " [%s]" % labels[1],
+ }
+
def _filemerge(premerge, repo, mynode, orig, fcd, fco, fca, labels=None):
"""perform a 3-way merge in the working directory
@@ -588,7 +610,7 @@
toolconf = tool, toolpath, binary, symlink
if mergetype == nomerge:
- r, deleted = func(repo, mynode, orig, fcd, fco, fca, toolconf)
+ r, deleted = func(repo, mynode, orig, fcd, fco, fca, toolconf, labels)
return True, r, deleted
if premerge: