From ed9a31a26e55aae097478d344964bfda3dccc1e4 Mon Sep 17 00:00:00 2001 From: Boris Feld Date: Sun, 8 Oct 2017 20:37:13 +0200 Subject: [PATCH] configitems: register the full 'merge-tools' config and sub-options We register the merge-tools config section (which has an arbitrary base config value) and the possible sub-attribute. The sub-attribute has to be registered first or at the same time otherwise the '.*' item would shadow them. Merge tools could include "." in their name so we can't constrain any more than just ".*". --- mercurial/configitems.py | 54 ++++++++++++++++++++++++++++++++++++++++ mercurial/filemerge.py | 22 ++++++++-------- 2 files changed, 64 insertions(+), 12 deletions(-) diff --git a/mercurial/configitems.py b/mercurial/configitems.py index b16e0fe09a..48946c30d1 100644 --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -544,6 +544,60 @@ coreconfigitem('merge', 'on-failure', coreconfigitem('merge', 'preferancestor', default=lambda: ['*'], ) +coreconfigitem('merge-tools', '.*', + default=None, + generic=True, +) +coreconfigitem('merge-tools', r'.*\.args$', + default="$local $base $other", + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.binary$', + default=False, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.check$', + default=list, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.checkchanged$', + default=False, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.executable$', + default=dynamicdefault, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.fixeol$', + default=False, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.gui$', + default=False, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.priority$', + default=0, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.premerge$', + default=dynamicdefault, + generic=True, + priority=-1, +) +coreconfigitem('merge-tools', r'.*\.symlink$', + default=False, + generic=True, + priority=-1, +) coreconfigitem('pager', 'attend-.*', default=dynamicdefault, generic=True, diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py index a4184e2d82..18e3c8192b 100644 --- a/mercurial/filemerge.py +++ b/mercurial/filemerge.py @@ -29,16 +29,14 @@ from . import ( util, ) -def _toolstr(ui, tool, part, default=""): - return ui.config("merge-tools", tool + "." + part, default) +def _toolstr(ui, tool, part, *args): + return ui.config("merge-tools", tool + "." + part, *args) -def _toolbool(ui, tool, part, default=False): - return ui.configbool("merge-tools", tool + "." + part, default) +def _toolbool(ui, tool, part,*args): + return ui.configbool("merge-tools", tool + "." + part, *args) -def _toollist(ui, tool, part, default=None): - if default is None: - default = [] - return ui.configlist("merge-tools", tool + "." + part, default) +def _toollist(ui, tool, part): + return ui.configlist("merge-tools", tool + "." + part) internals = {} # Merge tools to document. @@ -186,8 +184,8 @@ def _picktool(repo, ui, path, binary, symlink, changedelete): for k, v in ui.configitems("merge-tools"): t = k.split('.')[0] if t not in tools: - tools[t] = int(_toolstr(ui, t, "priority", "0")) - if _toolbool(ui, t, "disabled", False): + tools[t] = int(_toolstr(ui, t, "priority")) + if _toolbool(ui, t, "disabled"): disabled.add(t) names = tools.keys() tools = sorted([(-p, tool) for tool, p in tools.items() @@ -327,7 +325,7 @@ def _premerge(repo, fcd, fco, fca, toolconf, files, labels=None): try: premerge = _toolbool(ui, tool, "premerge", not binary) except error.ConfigError: - premerge = _toolstr(ui, tool, "premerge").lower() + premerge = _toolstr(ui, tool, "premerge", "").lower() if premerge not in validkeep: _valid = ', '.join(["'" + v + "'" for v in validkeep]) raise error.ConfigError(_("%s.premerge not valid " @@ -508,7 +506,7 @@ def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): } ui = repo.ui - args = _toolstr(ui, tool, "args", '$local $base $other') + args = _toolstr(ui, tool, "args") if "$output" in args: # read input from backup, write to original out = a