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") % |
|
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") % |
|
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") % |
|
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") % |
|
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") % |
|
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