D5959: templates: adding a config() function for template customization
rdamazio (Rodrigo Damazio Bovendorp)
phabricator at mercurial-scm.org
Sun Feb 17 08:52:16 EST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG6704696141b8: templates: adding a config() function for template customization (authored by rdamazio, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D5959?vs=14083&id=14133
REVISION DETAIL
https://phab.mercurial-scm.org/D5959
AFFECTED FILES
mercurial/configitems.py
mercurial/templatefuncs.py
tests/test-template-functions.t
CHANGE DETAILS
diff --git a/tests/test-template-functions.t b/tests/test-template-functions.t
--- a/tests/test-template-functions.t
+++ b/tests/test-template-functions.t
@@ -1549,4 +1549,31 @@
$ HGENCODING=utf-8 hg debugtemplate "{pad('`cat utf-8`', 2, '-')}\n"
\xc3\xa9- (esc)
+read config options:
+
+ $ hg log -T "{config('templateconfig', 'knob', 'foo')}\n"
+ foo
+ $ hg log -T "{config('templateconfig', 'knob', 'foo')}\n" \
+ > --config templateconfig.knob=bar
+ bar
+ $ hg log -T "{configbool('templateconfig', 'knob', True)}\n"
+ True
+ $ hg log -T "{configbool('templateconfig', 'knob', True)}\n" \
+ > --config templateconfig.knob=0
+ False
+ $ hg log -T "{configint('templateconfig', 'knob', 123)}\n"
+ 123
+ $ hg log -T "{configint('templateconfig', 'knob', 123)}\n" \
+ > --config templateconfig.knob=456
+ 456
+ $ hg log -T "{config('templateconfig', 'knob')}\n"
+ devel-warn: config item requires an explicit default value: 'templateconfig.knob' at: * (glob)
+
+ $ hg log -T "{configbool('ui', 'interactive')}\n"
+ False
+ $ hg log -T "{configbool('ui', 'interactive')}\n" --config ui.interactive=1
+ True
+ $ hg log -T "{config('templateconfig', 'knob', if(true, 'foo', 'bar'))}\n"
+ foo
+
$ cd ..
diff --git a/mercurial/templatefuncs.py b/mercurial/templatefuncs.py
--- a/mercurial/templatefuncs.py
+++ b/mercurial/templatefuncs.py
@@ -295,6 +295,39 @@
hint = _("get() expects a dict as first argument")
raise error.ParseError(bytes(err), hint=hint)
+ at templatefunc('config(section, name[, default])', requires={'ui'})
+def config(context, mapping, args):
+ """Returns the requested hgrc config option as a string."""
+ fn = context.resource(mapping, 'ui').config
+ return _config(context, mapping, args, fn, evalstring)
+
+ at templatefunc('configbool(section, name[, default])', requires={'ui'})
+def configbool(context, mapping, args):
+ """Returns the requested hgrc config option as a boolean."""
+ fn = context.resource(mapping, 'ui').configbool
+ return _config(context, mapping, args, fn, evalboolean)
+
+ at templatefunc('configint(section, name[, default])', requires={'ui'})
+def configint(context, mapping, args):
+ """Returns the requested hgrc config option as an integer."""
+ fn = context.resource(mapping, 'ui').configint
+ return _config(context, mapping, args, fn, evalinteger)
+
+def _config(context, mapping, args, configfn, defaultfn):
+ if not (2 <= len(args) <= 3):
+ raise error.ParseError(_("config expects two or three arguments"))
+
+ # The config option can come from any section, though we specifically
+ # reserve the [templateconfig] section for dynamically defining options
+ # for this function without also requiring an extension.
+ section = evalstringliteral(context, mapping, args[0])
+ name = evalstringliteral(context, mapping, args[1])
+ if len(args) == 3:
+ default = defaultfn(context, mapping, args[2])
+ return configfn(section, name, default)
+ else:
+ return configfn(section, name)
+
@templatefunc('if(expr, then[, else])')
def if_(context, mapping, args):
"""Conditionally execute based on the result of
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -1081,6 +1081,10 @@
default=None,
generic=True,
)
+coreconfigitem('templateconfig', '.*',
+ default=dynamicdefault,
+ generic=True,
+)
coreconfigitem('trusted', 'groups',
default=list,
)
To: rdamazio, #hg-reviewers, durin42
Cc: durin42, mercurial-devel
More information about the Mercurial-devel
mailing list