Patchwork [2,of,2] templater: move label() function from color extension

login
register
mail settings
Submitter Yuya Nishihara
Date March 5, 2016, 2:07 p.m.
Message ID <a0bb91d92f440b114966.1457186820@mimosa>
Download mbox | patch
Permalink /patch/13618/
State Accepted
Delegated to: Augie Fackler
Headers show

Comments

Yuya Nishihara - March 5, 2016, 2:07 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# 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.
Sean Farley - March 7, 2016, 1:39 a.m.
Yuya Nishihara <yuya@tcha.org> writes:

> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # 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.

These patches look good to me.
Augie Fackler - March 8, 2016, 3:21 a.m.
On Sat, Mar 05, 2016 at 11:07:00PM +0900, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # Date 1434031454 -32400
> #      Thu Jun 11 23:04:14 2015 +0900
> # Node ID a0bb91d92f440b114966015f11160527457f7325
> # Parent  b4bdb4210d4d23d0c783bfed38ee1dd5c15f3a15
> templater: move label() function from color extension

queued, thanks

>
> 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'
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

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'