Show More
@@ -1193,6 +1193,9 b" coreconfigitem('ui', 'paginate'," | |||||
1193 | coreconfigitem('ui', 'patch', |
|
1193 | coreconfigitem('ui', 'patch', | |
1194 | default=None, |
|
1194 | default=None, | |
1195 | ) |
|
1195 | ) | |
|
1196 | coreconfigitem('ui', 'pre-merge-tool-output-template', | |||
|
1197 | default=None, | |||
|
1198 | ) | |||
1196 | coreconfigitem('ui', 'portablefilenames', |
|
1199 | coreconfigitem('ui', 'portablefilenames', | |
1197 | default='warn', |
|
1200 | default='warn', | |
1198 | ) |
|
1201 | ) |
@@ -13,7 +13,11 b' import re' | |||||
13 | import shutil |
|
13 | import shutil | |
14 |
|
14 | |||
15 | from .i18n import _ |
|
15 | from .i18n import _ | |
16 |
from .node import |
|
16 | from .node import ( | |
|
17 | hex, | |||
|
18 | nullid, | |||
|
19 | short, | |||
|
20 | ) | |||
17 |
|
21 | |||
18 | from . import ( |
|
22 | from . import ( | |
19 | encoding, |
|
23 | encoding, | |
@@ -27,6 +31,7 b' from . import (' | |||||
27 | tagmerge, |
|
31 | tagmerge, | |
28 | templatekw, |
|
32 | templatekw, | |
29 | templater, |
|
33 | templater, | |
|
34 | templateutil, | |||
30 | util, |
|
35 | util, | |
31 | ) |
|
36 | ) | |
32 |
|
37 | |||
@@ -536,6 +541,44 b' def _xmergeimm(repo, mynode, orig, fcd, ' | |||||
536 | raise error.InMemoryMergeConflictsError('in-memory merge does not support ' |
|
541 | raise error.InMemoryMergeConflictsError('in-memory merge does not support ' | |
537 | 'external merge tools') |
|
542 | 'external merge tools') | |
538 |
|
543 | |||
|
544 | def _describemerge(ui, repo, mynode, fcl, fcb, fco, env, toolpath, args): | |||
|
545 | tmpl = ui.config('ui', 'pre-merge-tool-output-template') | |||
|
546 | if not tmpl: | |||
|
547 | return | |||
|
548 | ||||
|
549 | mappingdict = templateutil.mappingdict | |||
|
550 | props = {'ctx': fcl.changectx(), | |||
|
551 | 'node': hex(mynode), | |||
|
552 | 'path': fcl.path(), | |||
|
553 | 'local': mappingdict({'ctx': fcl.changectx(), | |||
|
554 | 'fctx': fcl, | |||
|
555 | 'node': hex(mynode), | |||
|
556 | 'name': _('local'), | |||
|
557 | 'islink': 'l' in fcl.flags(), | |||
|
558 | 'label': env['HG_MY_LABEL']}), | |||
|
559 | 'base': mappingdict({'ctx': fcb.changectx(), | |||
|
560 | 'fctx': fcb, | |||
|
561 | 'name': _('base'), | |||
|
562 | 'islink': 'l' in fcb.flags(), | |||
|
563 | 'label': env['HG_BASE_LABEL']}), | |||
|
564 | 'other': mappingdict({'ctx': fco.changectx(), | |||
|
565 | 'fctx': fco, | |||
|
566 | 'name': _('other'), | |||
|
567 | 'islink': 'l' in fco.flags(), | |||
|
568 | 'label': env['HG_OTHER_LABEL']}), | |||
|
569 | 'toolpath': toolpath, | |||
|
570 | 'toolargs': args} | |||
|
571 | ||||
|
572 | # TODO: make all of this something that can be specified on a per-tool basis | |||
|
573 | tmpl = templater.unquotestring(tmpl) | |||
|
574 | ||||
|
575 | # Not using cmdutil.rendertemplate here since it causes errors importing | |||
|
576 | # things for us to import cmdutil. | |||
|
577 | tres = formatter.templateresources(ui, repo) | |||
|
578 | t = formatter.maketemplater(ui, tmpl, defaults=templatekw.keywords, | |||
|
579 | resources=tres) | |||
|
580 | ui.status(t.renderdefault(props)) | |||
|
581 | ||||
539 | def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
|
582 | def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): | |
540 | tool, toolpath, binary, symlink, scriptfn = toolconf |
|
583 | tool, toolpath, binary, symlink, scriptfn = toolconf | |
541 | if fcd.isabsent() or fco.isabsent(): |
|
584 | if fcd.isabsent() or fco.isabsent(): | |
@@ -584,6 +627,7 b' def _xmerge(repo, mynode, orig, fcd, fco' | |||||
584 | if scriptfn is None: |
|
627 | if scriptfn is None: | |
585 | cmd = toolpath + ' ' + args |
|
628 | cmd = toolpath + ' ' + args | |
586 | repo.ui.debug('launching merge tool: %s\n' % cmd) |
|
629 | repo.ui.debug('launching merge tool: %s\n' % cmd) | |
|
630 | _describemerge(ui, repo, mynode, fcd, fca, fco, env, toolpath, args) | |||
587 | r = ui.system(cmd, cwd=repo.root, environ=env, |
|
631 | r = ui.system(cmd, cwd=repo.root, environ=env, | |
588 | blockedtag='mergetool') |
|
632 | blockedtag='mergetool') | |
589 | else: |
|
633 | else: |
@@ -2296,6 +2296,16 b' User interface controls.' | |||||
2296 |
|
2296 | |||
2297 | On Windows, this configuration option is ignored and the command aborted. |
|
2297 | On Windows, this configuration option is ignored and the command aborted. | |
2298 |
|
2298 | |||
|
2299 | ``pre-merge-tool-output-template`` | |||
|
2300 | A template that is printed before executing an external merge tool. This can | |||
|
2301 | be used to print out additional context that might be useful to have during | |||
|
2302 | the conflict resolution, such as the description of the various commits | |||
|
2303 | involved or bookmarks/tags. | |||
|
2304 | ||||
|
2305 | Additional information is available in the ``local`, ``base``, and ``other`` | |||
|
2306 | dicts. For example: ``{local.label}``, ``{base.name}``, or | |||
|
2307 | ``{other.islink}``. | |||
|
2308 | ||||
2299 | ``quiet`` |
|
2309 | ``quiet`` | |
2300 | Reduce the amount of output printed. |
|
2310 | Reduce the amount of output printed. | |
2301 | (default: False) |
|
2311 | (default: False) |
@@ -1946,6 +1946,25 b' internal merge tools is checked strictly' | |||||
1946 | 0000: 00 01 02 03 |....| |
|
1946 | 0000: 00 01 02 03 |....| | |
1947 | $ hg merge --abort -q |
|
1947 | $ hg merge --abort -q | |
1948 |
|
1948 | |||
|
1949 | Check that the extra information is printed correctly | |||
|
1950 | ||||
|
1951 | $ hg merge 9 \ | |||
|
1952 | > --config merge-tools.testecho.executable='echo' \ | |||
|
1953 | > --config merge-tools.testecho.args='merge runs here ...' \ | |||
|
1954 | > --config merge-tools.testecho.binary=True \ | |||
|
1955 | > --config ui.merge=testecho \ | |||
|
1956 | > --config ui.pre-merge-tool-output-template='\n{label("extmerge.running_merge_tool", "Running merge tool for {path} ({toolpath}):")}\n{separate("\n", extmerge_section(local), extmerge_section(base), extmerge_section(other))}\n' \ | |||
|
1957 | > --config 'templatealias.extmerge_section(sect)="- {pad("{sect.name} ({sect.label})", 20, left=True)}: {revset(sect.node)%"{rev}:{shortest(node,8)} {desc|firstline} {separate(" ", tags, bookmarks, branch)}"}"' | |||
|
1958 | merging b | |||
|
1959 | ||||
|
1960 | Running merge tool for b (*/bin/echo): (glob) | |||
|
1961 | - local (working copy): 10:2d1f533d add binary file (#2) tip default | |||
|
1962 | - base (base): -1:00000000 default | |||
|
1963 | - other (merge rev): 9:1e7ad7d7 add binary file (#1) default | |||
|
1964 | merge runs here ... | |||
|
1965 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |||
|
1966 | (branch merge, don't forget to commit) | |||
|
1967 | ||||
1949 | Check that debugpicktool examines which merge tool is chosen for |
|
1968 | Check that debugpicktool examines which merge tool is chosen for | |
1950 | specified file as expected |
|
1969 | specified file as expected | |
1951 |
|
1970 |
General Comments 0
You need to be logged in to leave comments.
Login now