diff mercurial/subrepo.py @ 30060:a145161debed

merge: use labels in subrepo merge This is the last place that doesn't respect conflict labels in merge output. Teach subrepos to use subrepo merge output too.
author Simon Farnsworth <simonfar@fb.com>
date Sat, 08 Oct 2016 01:25:28 -0700
parents 19205a0e2bf1
children bb77654dc7ae
line wrap: on
line diff
--- a/mercurial/subrepo.py	Fri Oct 07 08:32:18 2016 -0400
+++ b/mercurial/subrepo.py	Sat Oct 08 01:25:28 2016 -0700
@@ -26,6 +26,7 @@
     config,
     error,
     exchange,
+    filemerge,
     match as matchmod,
     node,
     pathutil,
@@ -174,7 +175,7 @@
                                                 if state[s][1] != nullstate[1]]
     repo.wwrite('.hgsubstate', ''.join(lines), '')
 
-def submerge(repo, wctx, mctx, actx, overwrite):
+def submerge(repo, wctx, mctx, actx, overwrite, labels=None):
     """delegated from merge.applyupdates: merging of .hgsubstate file
     in working context, merging context and ancestor context"""
     if mctx == actx: # backwards?
@@ -200,6 +201,8 @@
             a = ld
 
         if s in s2:
+            prompts = filemerge.partextras(labels)
+            prompts['s'] = s
             r = s2[s]
             if ld == r or r == a: # no change or local is newer
                 sm[s] = l
@@ -209,10 +212,13 @@
                 wctx.sub(s).get(r, overwrite)
                 sm[s] = r
             elif ld[0] != r[0]: # sources differ
+                prompts['lo'] = l[0]
+                prompts['ro'] = r[0]
                 if repo.ui.promptchoice(
-                    _(' subrepository sources for %s differ\n'
-                      'use (l)ocal source (%s) or (r)emote source (%s)?'
-                      '$$ &Local $$ &Remote') % (s, l[0], r[0]), 0):
+                    _(' subrepository sources for %(s)s differ\n'
+                      'use (l)ocal%(l)s source (%(lo)s)'
+                      ' or (r)emote%(o)s source (%(ro)s)?'
+                      '$$ &Local $$ &Remote') % prompts, 0):
                     debug(s, "prompt changed, get", r)
                     wctx.sub(s).get(r, overwrite)
                     sm[s] = r
@@ -223,12 +229,14 @@
             else:
                 debug(s, "both sides changed")
                 srepo = wctx.sub(s)
+                prompts['sl'] = srepo.shortid(l[1])
+                prompts['sr'] = srepo.shortid(r[1])
                 option = repo.ui.promptchoice(
-                    _(' subrepository %s diverged (local revision: %s, '
-                      'remote revision: %s)\n'
-                      '(M)erge, keep (l)ocal or keep (r)emote?'
+                    _(' subrepository %(s)s diverged (local revision: %(sl)s, '
+                      'remote revision: %(sr)s)\n'
+                      '(M)erge, keep (l)ocal%(l)s or keep (r)emote%(o)s?'
                       '$$ &Merge $$ &Local $$ &Remote')
-                    % (s, srepo.shortid(l[1]), srepo.shortid(r[1])), 0)
+                    % prompts, 0)
                 if option == 0:
                     wctx.sub(s).merge(r)
                     sm[s] = l
@@ -249,9 +257,10 @@
             continue
         else:
             if repo.ui.promptchoice(
-                _(' local changed subrepository %s which remote removed\n'
+                _(' local%(l)s changed subrepository %(s)s'
+                  ' which remote%(o)s removed\n'
                   'use (c)hanged version or (d)elete?'
-                  '$$ &Changed $$ &Delete') % s, 0):
+                  '$$ &Changed $$ &Delete') % prompts, 0):
                 debug(s, "prompt remove")
                 wctx.sub(s).remove()
 
@@ -264,9 +273,10 @@
             sm[s] = r
         elif r != sa[s]:
             if repo.ui.promptchoice(
-                _(' remote changed subrepository %s which local removed\n'
+                _(' remote%(o)s changed subrepository %(s)s'
+                  ' which local%(l)s removed\n'
                   'use (c)hanged version or (d)elete?'
-                  '$$ &Changed $$ &Delete') % s, 0) == 0:
+                  '$$ &Changed $$ &Delete') % prompts, 0) == 0:
                 debug(s, "prompt recreate", r)
                 mctx.sub(s).get(r)
                 sm[s] = r