##// END OF EJS Templates
merge: use labels in prompts to the user...
Simon Farnsworth -
r29774:a7f89396 default
parent child Browse files
Show More
@@ -230,50 +230,56 b' def _matcheol(file, origfile):'
230 util.writefile(file, newdata)
230 util.writefile(file, newdata)
231
231
232 @internaltool('prompt', nomerge)
232 @internaltool('prompt', nomerge)
233 def _iprompt(repo, mynode, orig, fcd, fco, fca, toolconf):
233 def _iprompt(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
234 """Asks the user which of the local `p1()` or the other `p2()` version to
234 """Asks the user which of the local `p1()` or the other `p2()` version to
235 keep as the merged version."""
235 keep as the merged version."""
236 ui = repo.ui
236 ui = repo.ui
237 fd = fcd.path()
237 fd = fcd.path()
238
238
239 prompts = partextras(labels)
240 prompts['fd'] = fd
239 try:
241 try:
240 if fco.isabsent():
242 if fco.isabsent():
241 index = ui.promptchoice(
243 index = ui.promptchoice(
242 _("local changed %s which remote deleted\n"
244 _("local%(l)s changed %(fd)s which remote%(o)s deleted\n"
243 "use (c)hanged version, (d)elete, or leave (u)nresolved?"
245 "use (c)hanged version, (d)elete, or leave (u)nresolved?"
244 "$$ &Changed $$ &Delete $$ &Unresolved") % fd, 2)
246 "$$ &Changed $$ &Delete $$ &Unresolved") % prompts, 2)
245 choice = ['local', 'other', 'unresolved'][index]
247 choice = ['local', 'other', 'unresolved'][index]
246 elif fcd.isabsent():
248 elif fcd.isabsent():
247 index = ui.promptchoice(
249 index = ui.promptchoice(
248 _("remote changed %s which local deleted\n"
250 _("remote%(o)s changed %(fd)s which local%(l)s deleted\n"
249 "use (c)hanged version, leave (d)eleted, or "
251 "use (c)hanged version, leave (d)eleted, or "
250 "leave (u)nresolved?"
252 "leave (u)nresolved?"
251 "$$ &Changed $$ &Deleted $$ &Unresolved") % fd, 2)
253 "$$ &Changed $$ &Deleted $$ &Unresolved") % prompts, 2)
252 choice = ['other', 'local', 'unresolved'][index]
254 choice = ['other', 'local', 'unresolved'][index]
253 else:
255 else:
254 index = ui.promptchoice(
256 index = ui.promptchoice(
255 _("no tool found to merge %s\n"
257 _("no tool found to merge %(fd)s\n"
256 "keep (l)ocal, take (o)ther, or leave (u)nresolved?"
258 "keep (l)ocal%(l)s, take (o)ther%(o)s, or leave (u)nresolved?"
257 "$$ &Local $$ &Other $$ &Unresolved") % fd, 2)
259 "$$ &Local $$ &Other $$ &Unresolved") % prompts, 2)
258 choice = ['local', 'other', 'unresolved'][index]
260 choice = ['local', 'other', 'unresolved'][index]
259
261
260 if choice == 'other':
262 if choice == 'other':
261 return _iother(repo, mynode, orig, fcd, fco, fca, toolconf)
263 return _iother(repo, mynode, orig, fcd, fco, fca, toolconf,
264 labels)
262 elif choice == 'local':
265 elif choice == 'local':
263 return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf)
266 return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf,
267 labels)
264 elif choice == 'unresolved':
268 elif choice == 'unresolved':
265 return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf)
269 return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf,
270 labels)
266 except error.ResponseExpected:
271 except error.ResponseExpected:
267 ui.write("\n")
272 ui.write("\n")
268 return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf)
273 return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf,
274 labels)
269
275
270 @internaltool('local', nomerge)
276 @internaltool('local', nomerge)
271 def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf):
277 def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
272 """Uses the local `p1()` version of files as the merged version."""
278 """Uses the local `p1()` version of files as the merged version."""
273 return 0, fcd.isabsent()
279 return 0, fcd.isabsent()
274
280
275 @internaltool('other', nomerge)
281 @internaltool('other', nomerge)
276 def _iother(repo, mynode, orig, fcd, fco, fca, toolconf):
282 def _iother(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
277 """Uses the other `p2()` version of files as the merged version."""
283 """Uses the other `p2()` version of files as the merged version."""
278 if fco.isabsent():
284 if fco.isabsent():
279 # local changed, remote deleted -- 'deleted' picked
285 # local changed, remote deleted -- 'deleted' picked
@@ -285,7 +291,7 b' def _iother(repo, mynode, orig, fcd, fco'
285 return 0, deleted
291 return 0, deleted
286
292
287 @internaltool('fail', nomerge)
293 @internaltool('fail', nomerge)
288 def _ifail(repo, mynode, orig, fcd, fco, fca, toolconf):
294 def _ifail(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None):
289 """
295 """
290 Rather than attempting to merge files that were modified on both
296 Rather than attempting to merge files that were modified on both
291 branches, it marks them as unresolved. The resolve command must be
297 branches, it marks them as unresolved. The resolve command must be
@@ -537,6 +543,22 b' def _formatlabels(repo, fcd, fco, fca, l'
537 newlabels.append(_formatconflictmarker(repo, ca, tmpl, labels[2], pad))
543 newlabels.append(_formatconflictmarker(repo, ca, tmpl, labels[2], pad))
538 return newlabels
544 return newlabels
539
545
546 def partextras(labels):
547 """Return a dictionary of extra labels for use in prompts to the user
548
549 Intended use is in strings of the form "(l)ocal%(l)s".
550 """
551 if labels is None:
552 return {
553 "l": "",
554 "o": "",
555 }
556
557 return {
558 "l": " [%s]" % labels[0],
559 "o": " [%s]" % labels[1],
560 }
561
540 def _filemerge(premerge, repo, mynode, orig, fcd, fco, fca, labels=None):
562 def _filemerge(premerge, repo, mynode, orig, fcd, fco, fca, labels=None):
541 """perform a 3-way merge in the working directory
563 """perform a 3-way merge in the working directory
542
564
@@ -588,7 +610,7 b' def _filemerge(premerge, repo, mynode, o'
588 toolconf = tool, toolpath, binary, symlink
610 toolconf = tool, toolpath, binary, symlink
589
611
590 if mergetype == nomerge:
612 if mergetype == nomerge:
591 r, deleted = func(repo, mynode, orig, fcd, fco, fca, toolconf)
613 r, deleted = func(repo, mynode, orig, fcd, fco, fca, toolconf, labels)
592 return True, r, deleted
614 return True, r, deleted
593
615
594 if premerge:
616 if premerge:
@@ -1535,11 +1535,13 b' def update(repo, node, branchmerge, forc'
1535 if '.hgsubstate' in actionbyfile:
1535 if '.hgsubstate' in actionbyfile:
1536 f = '.hgsubstate'
1536 f = '.hgsubstate'
1537 m, args, msg = actionbyfile[f]
1537 m, args, msg = actionbyfile[f]
1538 prompts = filemerge.partextras(labels)
1539 prompts['f'] = f
1538 if m == 'cd':
1540 if m == 'cd':
1539 if repo.ui.promptchoice(
1541 if repo.ui.promptchoice(
1540 _("local changed %s which remote deleted\n"
1542 _("local%(l)s changed %(f)s which remote%(o)s deleted\n"
1541 "use (c)hanged version or (d)elete?"
1543 "use (c)hanged version or (d)elete?"
1542 "$$ &Changed $$ &Delete") % f, 0):
1544 "$$ &Changed $$ &Delete") % prompts, 0):
1543 actionbyfile[f] = ('r', None, "prompt delete")
1545 actionbyfile[f] = ('r', None, "prompt delete")
1544 elif f in p1:
1546 elif f in p1:
1545 actionbyfile[f] = ('am', None, "prompt keep")
1547 actionbyfile[f] = ('am', None, "prompt keep")
@@ -1549,9 +1551,9 b' def update(repo, node, branchmerge, forc'
1549 f1, f2, fa, move, anc = args
1551 f1, f2, fa, move, anc = args
1550 flags = p2[f2].flags()
1552 flags = p2[f2].flags()
1551 if repo.ui.promptchoice(
1553 if repo.ui.promptchoice(
1552 _("remote changed %s which local deleted\n"
1554 _("remote%(o)s changed %(f)s which local%(l)s deleted\n"
1553 "use (c)hanged version or leave (d)eleted?"
1555 "use (c)hanged version or leave (d)eleted?"
1554 "$$ &Changed $$ &Deleted") % f, 0) == 0:
1556 "$$ &Changed $$ &Deleted") % prompts, 0) == 0:
1555 actionbyfile[f] = ('g', (flags, False), "prompt recreating")
1557 actionbyfile[f] = ('g', (flags, False), "prompt recreating")
1556 else:
1558 else:
1557 del actionbyfile[f]
1559 del actionbyfile[f]
@@ -9,7 +9,7 b' from mercurial import ('
9 )
9 )
10
10
11 def failfilemerge(filemergefn,
11 def failfilemerge(filemergefn,
12 premerge, repo, mynode, orig, fcd, fco, fca, labels=None):
12 premerge, repo, mynode, orig, fcd, fco, fca, labels=None):
13 raise error.Abort("^C")
13 raise error.Abort("^C")
14 return filemergefn(premerge, repo, mynode, orig, fcd, fco, fca, labels)
14 return filemergefn(premerge, repo, mynode, orig, fcd, fco, fca, labels)
15
15
@@ -85,7 +85,7 b' Test disabling copy tracing'
85 > c
85 > c
86 > EOF
86 > EOF
87 rebasing 2:add3f11052fa "other" (tip)
87 rebasing 2:add3f11052fa "other" (tip)
88 remote changed a which local deleted
88 remote [source] changed a which local [dest] deleted
89 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
89 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
90
90
91 $ cat b
91 $ cat b
@@ -611,7 +611,7 b' the 1st commit of resuming.'
611 > EOF
611 > EOF
612 rebasing 1:72518492caa6 "#1"
612 rebasing 1:72518492caa6 "#1"
613 rebasing 4:07d6153b5c04 "#4"
613 rebasing 4:07d6153b5c04 "#4"
614 local changed .hglf/large1 which remote deleted
614 local [dest] changed .hglf/large1 which remote [source] deleted
615 use (c)hanged version, (d)elete, or leave (u)nresolved? c
615 use (c)hanged version, (d)elete, or leave (u)nresolved? c
616
616
617 $ hg diff -c "tip~1" --nodates .hglf/large1 | grep '^[+-][0-9a-z]'
617 $ hg diff -c "tip~1" --nodates .hglf/large1 | grep '^[+-][0-9a-z]'
@@ -717,9 +717,9 b' Non-interactive linear update'
717 $ echo changed >> file1
717 $ echo changed >> file1
718 $ hg rm file2
718 $ hg rm file2
719 $ hg update 1 -y
719 $ hg update 1 -y
720 local changed file1 which remote deleted
720 local [working copy] changed file1 which remote [destination] deleted
721 use (c)hanged version, (d)elete, or leave (u)nresolved? u
721 use (c)hanged version, (d)elete, or leave (u)nresolved? u
722 remote changed file2 which local deleted
722 remote [destination] changed file2 which local [working copy] deleted
723 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
723 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
724 1 files updated, 0 files merged, 0 files removed, 2 files unresolved
724 1 files updated, 0 files merged, 0 files removed, 2 files unresolved
725 use 'hg resolve' to retry unresolved file merges
725 use 'hg resolve' to retry unresolved file merges
@@ -893,9 +893,9 b' Force prompts with no input'
893 $ echo changed >> file1
893 $ echo changed >> file1
894 $ hg rm file2
894 $ hg rm file2
895 $ hg update 1 --config ui.interactive=True --tool :prompt
895 $ hg update 1 --config ui.interactive=True --tool :prompt
896 local changed file1 which remote deleted
896 local [working copy] changed file1 which remote [destination] deleted
897 use (c)hanged version, (d)elete, or leave (u)nresolved?
897 use (c)hanged version, (d)elete, or leave (u)nresolved?
898 remote changed file2 which local deleted
898 remote [destination] changed file2 which local [working copy] deleted
899 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
899 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
900 1 files updated, 0 files merged, 0 files removed, 2 files unresolved
900 1 files updated, 0 files merged, 0 files removed, 2 files unresolved
901 use 'hg resolve' to retry unresolved file merges
901 use 'hg resolve' to retry unresolved file merges
@@ -943,9 +943,9 b' Choose to merge all files'
943 $ echo changed >> file1
943 $ echo changed >> file1
944 $ hg rm file2
944 $ hg rm file2
945 $ hg update 1 --tool :merge3
945 $ hg update 1 --tool :merge3
946 local changed file1 which remote deleted
946 local [working copy] changed file1 which remote [destination] deleted
947 use (c)hanged version, (d)elete, or leave (u)nresolved? u
947 use (c)hanged version, (d)elete, or leave (u)nresolved? u
948 remote changed file2 which local deleted
948 remote [destination] changed file2 which local [working copy] deleted
949 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
949 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
950 1 files updated, 0 files merged, 0 files removed, 2 files unresolved
950 1 files updated, 0 files merged, 0 files removed, 2 files unresolved
951 use 'hg resolve' to retry unresolved file merges
951 use 'hg resolve' to retry unresolved file merges
@@ -999,9 +999,9 b' Test transitions between different merge'
999 (status identical)
999 (status identical)
1000
1000
1001 === :other -> :prompt ===
1001 === :other -> :prompt ===
1002 local changed file1 which remote deleted
1002 local [working copy] changed file1 which remote [destination] deleted
1003 use (c)hanged version, (d)elete, or leave (u)nresolved?
1003 use (c)hanged version, (d)elete, or leave (u)nresolved?
1004 remote changed file2 which local deleted
1004 remote [destination] changed file2 which local [working copy] deleted
1005 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
1005 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
1006 --- diff of status ---
1006 --- diff of status ---
1007 (status identical)
1007 (status identical)
@@ -1026,9 +1026,9 b' Test transitions between different merge'
1026 (status identical)
1026 (status identical)
1027
1027
1028 === :local -> :prompt ===
1028 === :local -> :prompt ===
1029 local changed file1 which remote deleted
1029 local [working copy] changed file1 which remote [destination] deleted
1030 use (c)hanged version, (d)elete, or leave (u)nresolved?
1030 use (c)hanged version, (d)elete, or leave (u)nresolved?
1031 remote changed file2 which local deleted
1031 remote [destination] changed file2 which local [working copy] deleted
1032 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
1032 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
1033 --- diff of status ---
1033 --- diff of status ---
1034 (status identical)
1034 (status identical)
@@ -1043,9 +1043,9 b' Test transitions between different merge'
1043 (status identical)
1043 (status identical)
1044
1044
1045 === :fail -> :prompt ===
1045 === :fail -> :prompt ===
1046 local changed file1 which remote deleted
1046 local [working copy] changed file1 which remote [destination] deleted
1047 use (c)hanged version, (d)elete, or leave (u)nresolved?
1047 use (c)hanged version, (d)elete, or leave (u)nresolved?
1048 remote changed file2 which local deleted
1048 remote [destination] changed file2 which local [working copy] deleted
1049 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
1049 use (c)hanged version, leave (d)eleted, or leave (u)nresolved?
1050 --- diff of status ---
1050 --- diff of status ---
1051 (status identical)
1051 (status identical)
@@ -173,7 +173,7 b' Update to link with local change should '
173 (couldn't find merge tool hgmerge|tool hgmerge can't handle symlinks) (re)
173 (couldn't find merge tool hgmerge|tool hgmerge can't handle symlinks) (re)
174 picked tool ':prompt' for a (binary False symlink True changedelete False)
174 picked tool ':prompt' for a (binary False symlink True changedelete False)
175 no tool found to merge a
175 no tool found to merge a
176 keep (l)ocal, take (o)ther, or leave (u)nresolved? u
176 keep (l)ocal [working copy], take (o)ther [destination], or leave (u)nresolved? u
177 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
177 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
178 use 'hg resolve' to retry unresolved file merges
178 use 'hg resolve' to retry unresolved file merges
179 1 other heads for branch "default"
179 1 other heads for branch "default"
@@ -135,7 +135,7 b' Full rebase all the way back from branch'
135 note: rebase of 1:1d1a643d390e created no changes to commit
135 note: rebase of 1:1d1a643d390e created no changes to commit
136 rebasing 2:ec2c14fb2984 "dev: f-dev stuff"
136 rebasing 2:ec2c14fb2984 "dev: f-dev stuff"
137 rebasing 4:4b019212aaf6 "dev: merge default"
137 rebasing 4:4b019212aaf6 "dev: merge default"
138 remote changed f-default which local deleted
138 remote [source] changed f-default which local [dest] deleted
139 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
139 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
140 rebasing 6:9455ee510502 "dev: merge default"
140 rebasing 6:9455ee510502 "dev: merge default"
141 saved backup bundle to $TESTTMP/ancestor-merge/.hg/strip-backup/1d1a643d390e-43e9e04b-backup.hg (glob)
141 saved backup bundle to $TESTTMP/ancestor-merge/.hg/strip-backup/1d1a643d390e-43e9e04b-backup.hg (glob)
@@ -164,7 +164,7 b' Grafty cherry picking rebasing:'
164 > EOF
164 > EOF
165 rebasing 2:ec2c14fb2984 "dev: f-dev stuff"
165 rebasing 2:ec2c14fb2984 "dev: f-dev stuff"
166 rebasing 4:4b019212aaf6 "dev: merge default"
166 rebasing 4:4b019212aaf6 "dev: merge default"
167 remote changed f-default which local deleted
167 remote [source] changed f-default which local [dest] deleted
168 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
168 use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
169 rebasing 6:9455ee510502 "dev: merge default"
169 rebasing 6:9455ee510502 "dev: merge default"
170 saved backup bundle to $TESTTMP/ancestor-merge-2/.hg/strip-backup/ec2c14fb2984-62d0b222-backup.hg (glob)
170 saved backup bundle to $TESTTMP/ancestor-merge-2/.hg/strip-backup/ec2c14fb2984-62d0b222-backup.hg (glob)
@@ -62,7 +62,7 b' delete .hgsubstate and update'
62 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
62 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
63 $ rm .hgsubstate
63 $ rm .hgsubstate
64 $ hg up 0
64 $ hg up 0
65 remote changed .hgsubstate which local deleted
65 remote [destination] changed .hgsubstate which local [working copy] deleted
66 use (c)hanged version or leave (d)eleted? c
66 use (c)hanged version or leave (d)eleted? c
67 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
67 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
68 $ hg st
68 $ hg st
General Comments 0
You need to be logged in to leave comments. Login now