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 ".*".
This commit is contained in:
Boris Feld 2017-10-08 20:37:13 +02:00
parent 549788470a
commit ed9a31a26e
2 changed files with 64 additions and 12 deletions

View File

@ -544,6 +544,60 @@ coreconfigitem('merge', 'on-failure',
coreconfigitem('merge', 'preferancestor', coreconfigitem('merge', 'preferancestor',
default=lambda: ['*'], 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-.*', coreconfigitem('pager', 'attend-.*',
default=dynamicdefault, default=dynamicdefault,
generic=True, generic=True,

View File

@ -29,16 +29,14 @@ from . import (
util, util,
) )
def _toolstr(ui, tool, part, default=""): def _toolstr(ui, tool, part, *args):
return ui.config("merge-tools", tool + "." + part, default) return ui.config("merge-tools", tool + "." + part, *args)
def _toolbool(ui, tool, part, default=False): def _toolbool(ui, tool, part,*args):
return ui.configbool("merge-tools", tool + "." + part, default) return ui.configbool("merge-tools", tool + "." + part, *args)
def _toollist(ui, tool, part, default=None): def _toollist(ui, tool, part):
if default is None: return ui.configlist("merge-tools", tool + "." + part)
default = []
return ui.configlist("merge-tools", tool + "." + part, default)
internals = {} internals = {}
# Merge tools to document. # Merge tools to document.
@ -186,8 +184,8 @@ def _picktool(repo, ui, path, binary, symlink, changedelete):
for k, v in ui.configitems("merge-tools"): for k, v in ui.configitems("merge-tools"):
t = k.split('.')[0] t = k.split('.')[0]
if t not in tools: if t not in tools:
tools[t] = int(_toolstr(ui, t, "priority", "0")) tools[t] = int(_toolstr(ui, t, "priority"))
if _toolbool(ui, t, "disabled", False): if _toolbool(ui, t, "disabled"):
disabled.add(t) disabled.add(t)
names = tools.keys() names = tools.keys()
tools = sorted([(-p, tool) for tool, p in tools.items() 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: try:
premerge = _toolbool(ui, tool, "premerge", not binary) premerge = _toolbool(ui, tool, "premerge", not binary)
except error.ConfigError: except error.ConfigError:
premerge = _toolstr(ui, tool, "premerge").lower() premerge = _toolstr(ui, tool, "premerge", "").lower()
if premerge not in validkeep: if premerge not in validkeep:
_valid = ', '.join(["'" + v + "'" for v in validkeep]) _valid = ', '.join(["'" + v + "'" for v in validkeep])
raise error.ConfigError(_("%s.premerge not valid " 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 ui = repo.ui
args = _toolstr(ui, tool, "args", '$local $base $other') args = _toolstr(ui, tool, "args")
if "$output" in args: if "$output" in args:
# read input from backup, write to original # read input from backup, write to original
out = a out = a