From patchwork Sat Mar 5 14:07:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,2] templater: move label() function from color extension From: Yuya Nishihara X-Patchwork-Id: 13618 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Sat, 05 Mar 2016 23:07:00 +0900 # HG changeset patch # User Yuya Nishihara # Date 1434031454 -32400 # Thu Jun 11 23:04:14 2015 +0900 # Node ID a0bb91d92f440b114966015f11160527457f7325 # Parent b4bdb4210d4d23d0c783bfed38ee1dd5c15f3a15 templater: move label() function from color extension ui.label() is no-op by default, so we can just call ui.label() by label() template function no matter if the color is enabled or not. diff --git a/hgext/color.py b/hgext/color.py --- a/hgext/color.py +++ b/hgext/color.py @@ -157,7 +157,6 @@ import os from mercurial import cmdutil, commands, dispatch, extensions, subrepo, util from mercurial import ui as uimod -from mercurial import templater, error from mercurial.i18n import _ cmdtable = {} @@ -480,24 +479,6 @@ class colorui(uimod.ui): for s in msg.split('\n')]) return msg -def templatelabel(context, mapping, args): - if len(args) != 2: - # i18n: "label" is a keyword - raise error.ParseError(_("label expects two arguments")) - - thing = templater.evalstring(context, mapping, args[1]) - - # apparently, repo could be a string that is the favicon? - repo = mapping.get('repo', '') - if isinstance(repo, str): - return thing - - # preserve unknown symbol as literal so effects like 'red', 'bold', - # etc. don't need to be quoted - label = templater.evalstringliteral(context, mapping, args[0]) - - return repo.ui.label(thing, label) - def uisetup(ui): if ui.plain(): return @@ -519,8 +500,6 @@ def uisetup(ui): return orig(gitsub, commands, env, stream, cwd) extensions.wrapfunction(dispatch, '_runcommand', colorcmd) extensions.wrapfunction(subrepo.gitsubrepo, '_gitnodir', colorgit) - templatelabel.__doc__ = templater.funcs['label'].__doc__ - templater.funcs['label'] = templatelabel def extsetup(ui): commands.globalopts.append( diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -547,8 +547,18 @@ def label(context, mapping, args): # i18n: "label" is a keyword raise error.ParseError(_("label expects two arguments")) - # ignore args[0] (the label string) since this is supposed to be a a no-op - yield args[1][0](context, mapping, args[1][1]) + thing = evalstring(context, mapping, args[1]) + + # apparently, repo could be a string that is the favicon? + repo = mapping.get('repo', '') + if isinstance(repo, str): + return thing + + # preserve unknown symbol as literal so effects like 'red', 'bold', + # etc. don't need to be quoted + label = evalstringliteral(context, mapping, args[0]) + + return repo.ui.label(thing, label) def latesttag(context, mapping, args): """:latesttag([pattern]): The global tags matching the given pattern on the diff --git a/tests/test-command-template.t b/tests/test-command-template.t --- a/tests/test-command-template.t +++ b/tests/test-command-template.t @@ -3183,6 +3183,13 @@ color effect can be specified without qu $ hg log --color=always -l 1 --template '{label(red, "text\n")}' \x1b[0;31mtext\x1b[0m (esc) +label should be no-op if color is disabled: + + $ hg log --color=never -l 1 --template '{label(red, "text\n")}' + text + $ hg log --config extensions.color=! -l 1 --template '{label(red, "text\n")}' + text + Test branches inside if statement: $ hg log -r 0 --template '{if(branches, "yes", "no")}\n'