Mercurial > public > mercurial-scm > hg
comparison mercurial/debugcommands.py @ 32256:9bc36198338e
debugcommands: add debugpickmergetool to examine which merge tool is chosen
Before this patch, there is no convenient way to know which merge tool
is chosen for each managed files without actual merging.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sat, 13 May 2017 03:37:50 +0900 |
parents | 75e93d95aae6 |
children | ccef71de7d41 |
comparison
equal
deleted
inserted
replaced
32255:7e35d31b41fd | 32256:9bc36198338e |
---|---|
38 dagutil, | 38 dagutil, |
39 encoding, | 39 encoding, |
40 error, | 40 error, |
41 exchange, | 41 exchange, |
42 extensions, | 42 extensions, |
43 filemerge, | |
43 fileset, | 44 fileset, |
44 formatter, | 45 formatter, |
45 hg, | 46 hg, |
46 localrepo, | 47 localrepo, |
47 lock as lockmod, | 48 lock as lockmod, |
1500 dirs.update(d) | 1501 dirs.update(d) |
1501 files.update(dirs) | 1502 files.update(dirs) |
1502 ui.write('\n'.join(repo.pathto(p, cwd) for p in sorted(files))) | 1503 ui.write('\n'.join(repo.pathto(p, cwd) for p in sorted(files))) |
1503 ui.write('\n') | 1504 ui.write('\n') |
1504 | 1505 |
1506 @command('debugpickmergetool', | |
1507 [('r', 'rev', '', _('check for files in this revision'), _('REV')), | |
1508 ('', 'changedelete', None, _('emulate merging change and delete')), | |
1509 ] + commands.walkopts + commands.mergetoolopts, | |
1510 _('[PATTERN]...'), | |
1511 inferrepo=True) | |
1512 def debugpickmergetool(ui, repo, *pats, **opts): | |
1513 """examine which merge tool is chosen for specified file | |
1514 | |
1515 As described in :hg:`help merge-tools`, Mercurial examines | |
1516 configurations below in this order to decide which merge tool is | |
1517 chosen for specified file. | |
1518 | |
1519 1. ``--tool`` option | |
1520 2. ``HGMERGE`` environment variable | |
1521 3. configurations in ``merge-patterns`` section | |
1522 4. configuration of ``ui.merge`` | |
1523 5. configurations in ``merge-tools`` section | |
1524 6. ``hgmerge`` tool (for historical reason only) | |
1525 7. default tool for fallback (``:merge`` or ``:prompt``) | |
1526 | |
1527 This command writes out examination result in the style below:: | |
1528 | |
1529 FILE = MERGETOOL | |
1530 | |
1531 By default, all files known in the first parent context of the | |
1532 working directory are examined. Use file patterns and/or -I/-X | |
1533 options to limit target files. -r/--rev is also useful to examine | |
1534 files in another context without actual updating to it. | |
1535 | |
1536 With --debug, this command shows warning messages while matching | |
1537 against ``merge-patterns`` and so on, too. It is recommended to | |
1538 use this option with explicit file patterns and/or -I/-X options, | |
1539 because this option increases amount of output per file according | |
1540 to configurations in hgrc. | |
1541 | |
1542 With -v/--verbose, this command shows configurations below at | |
1543 first (only if specified). | |
1544 | |
1545 - ``--tool`` option | |
1546 - ``HGMERGE`` environment variable | |
1547 - configuration of ``ui.merge`` | |
1548 | |
1549 If merge tool is chosen before matching against | |
1550 ``merge-patterns``, this command can't show any helpful | |
1551 information, even with --debug. In such case, information above is | |
1552 useful to know why a merge tool is chosen. | |
1553 """ | |
1554 overrides = {} | |
1555 if opts['tool']: | |
1556 overrides[('ui', 'forcemerge')] = opts['tool'] | |
1557 ui.note(('with --tool %r\n') % (opts['tool'])) | |
1558 | |
1559 with ui.configoverride(overrides, 'debugmergepatterns'): | |
1560 hgmerge = encoding.environ.get("HGMERGE") | |
1561 if hgmerge is not None: | |
1562 ui.note(('with HGMERGE=%r\n') % (hgmerge)) | |
1563 uimerge = ui.config("ui", "merge") | |
1564 if uimerge: | |
1565 ui.note(('with ui.merge=%r\n') % (uimerge)) | |
1566 | |
1567 ctx = scmutil.revsingle(repo, opts.get('rev')) | |
1568 m = scmutil.match(ctx, pats, opts) | |
1569 changedelete = opts['changedelete'] | |
1570 for path in ctx.walk(m): | |
1571 fctx = ctx[path] | |
1572 try: | |
1573 if not ui.debugflag: | |
1574 ui.pushbuffer(error=True) | |
1575 tool, toolpath = filemerge._picktool(repo, ui, path, | |
1576 fctx.isbinary(), | |
1577 'l' in fctx.flags(), | |
1578 changedelete) | |
1579 finally: | |
1580 if not ui.debugflag: | |
1581 ui.popbuffer() | |
1582 ui.write(('%s = %s\n') % (path, tool)) | |
1583 | |
1505 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True) | 1584 @command('debugpushkey', [], _('REPO NAMESPACE [KEY OLD NEW]'), norepo=True) |
1506 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts): | 1585 def debugpushkey(ui, repopath, namespace, *keyinfo, **opts): |
1507 '''access the pushkey key/value protocol | 1586 '''access the pushkey key/value protocol |
1508 | 1587 |
1509 With two args, list the keys in the given namespace. | 1588 With two args, list the keys in the given namespace. |