@@ -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 ..
@@ -295,6 +295,39 @@
hint = _("get() expects a dict as first argument")
raise error.ParseError(bytes(err), hint=hint)
+@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)
+
+@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)
+
+@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
@@ -1081,6 +1081,10 @@
default=None,
generic=True,
)
+coreconfigitem('templateconfig', '.*',
+ default=dynamicdefault,
+ generic=True,
+)
coreconfigitem('trusted', 'groups',
default=list,
)