Patchwork [1,of,7] configitems: register the full 'merge-tools' config and sub-options

login
register
mail settings
Submitter Boris Feld
Date Oct. 16, 2017, 4:53 p.m.
Message ID <e5b06824bc5511d914a2.1508172806@FB>
Download mbox | patch
Permalink /patch/25007/
State Accepted
Headers show

Comments

Boris Feld - Oct. 16, 2017, 4:53 p.m.
# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 1507487833 -7200
#      Sun Oct 08 20:37:13 2017 +0200
# Node ID e5b06824bc5511d914a29983fb95264719493fb5
# Parent  cfb054a7ecc45bcaac95f1e64b644dd0411ffe41
# EXP-Topic config.register.ready
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r e5b06824bc55
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 ".*".

Patch

diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -534,6 +534,60 @@ 
 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
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -30,16 +30,14 @@ 
     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.
@@ -187,8 +185,8 @@ 
     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()
@@ -328,7 +326,7 @@ 
     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 "
@@ -503,7 +501,7 @@ 
                }
         ui = repo.ui
 
-        args = _toolstr(ui, tool, "args", '$local $base $other')
+        args = _toolstr(ui, tool, "args")
         if "$output" in args:
             out, a = a, back # read input from backup, write to original
         replace = {'local': a, 'base': b, 'other': c, 'output': out}