From patchwork Sun Feb 17 13:52:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D5959: templates: adding a config() function for template customization From: phabricator X-Patchwork-Id: 38798 Message-Id: <4f0fb86d8b17629446862776bda873fc@localhost.localdomain> To: mercurial-devel@mercurial-scm.org Date: Sun, 17 Feb 2019 13:52:16 +0000 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 To: rdamazio, #hg-reviewers, durin42 Cc: durin42, mercurial-devel 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) +@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 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, )