[PATCH 2 of 4] templater: fix if() to not evaluate False as bool('False')

timeless timeless at gmail.com
Wed Aug 24 13:35:40 EDT 2016


While I support this change, I think it needs a BC

On Sun, Aug 21, 2016 at 10:53 AM, Yuya Nishihara <yuya at tcha.org> wrote:
> # HG changeset patch
> # User Yuya Nishihara <yuya at tcha.org>
> # Date 1471505362 -32400
> #      Thu Aug 18 16:29:22 2016 +0900
> # Node ID dfc5b7368fa170e8535202bc4c7057f53d65d3ff
> # Parent  7e4ca26412a04f858f31f7c409734eb935a3586f
> templater: fix if() to not evaluate False as bool('False')
>
> Before, False was True. This patch fixes the issue by processing True/False
> transparently. The other values (including integer 0) are tested as strings
> for backward compatibility, which means "if(latesttagdistance)" never be False.
>
> Should we change the behavior of "if(0)" as well?
>
> diff --git a/mercurial/templater.py b/mercurial/templater.py
> --- a/mercurial/templater.py
> +++ b/mercurial/templater.py
> @@ -289,6 +289,15 @@ def evalfuncarg(context, mapping, arg):
>          thing = stringify(thing)
>      return thing
>
> +def evalboolean(context, mapping, arg):
> +    func, data = arg
> +    thing = func(context, mapping, data)
> +    if isinstance(thing, bool):
> +        return thing
> +    # other objects are evaluated as strings, which means 0 is True, but
> +    # empty dict/list should be False as they are expected to be ''
> +    return bool(stringify(thing))
> +
>  def evalinteger(context, mapping, arg, err):
>      v = evalfuncarg(context, mapping, arg)
>      try:
> @@ -560,7 +569,7 @@ def if_(context, mapping, args):
>          # i18n: "if" is a keyword
>          raise error.ParseError(_("if expects two or three arguments"))
>
> -    test = evalstring(context, mapping, args[0])
> +    test = evalboolean(context, mapping, args[0])
>      if test:
>          yield args[1][0](context, mapping, args[1][1])
>      elif len(args) == 3:
> diff --git a/tests/test-branches.t b/tests/test-branches.t
> --- a/tests/test-branches.t
> +++ b/tests/test-branches.t
> @@ -516,6 +516,8 @@ template output:
>     }
>    ]
>
> +  $ hg branches --closed -T '{if(closed, "{branch}\n")}'
> +  c
>
>  Tests of revision branch name caching
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list