[PATCH 6 of 6] templatekw: forward _hybrid.get to raw values so that get(extras, key) works

Ryan McElroy rm at fb.com
Mon Mar 9 02:15:40 CDT 2015


On 3/8/2015 4:56 AM, Yuya Nishihara wrote:
> # HG changeset patch
> # User Yuya Nishihara <yuya at tcha.org>
> # Date 1424269072 -32400
> #      Wed Feb 18 23:17:52 2015 +0900
> # Node ID 3627f2ee9b407e144d7aad72465ace65714a22a9
> # Parent  600b24dca4f75c9692e599febe5a85e435fb79c1
> templatekw: forward _hybrid.get to raw values so that get(extras, key) works
>
> ef78450c8df6 implies that the primary goal is to allow "{get(extras, key)}",
> but it didn't work.
>
> I'm not sure if _hybrid should forward all unknown attributes to values, so
> only "get" is forwarded for now.
>
> diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py
> --- a/mercurial/templatekw.py
> +++ b/mercurial/templatekw.py
> @@ -14,6 +14,7 @@ import hbisect
>   #  "{files % '{file}\n'}" (hgweb-style with inlining and function support)
>   # and to access raw values:
>   #  "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
> +#  "{get(extras, key)}"
>   
>   class _hybrid(object):
>       def __init__(self, gen, values, makemap, joinfmt=None):
> @@ -34,6 +35,10 @@ class _hybrid(object):
>           return x in self.values
>       def __len__(self):
>           return len(self.values)
> +    def __getattr__(self, name):
> +        if name != 'get':
> +            raise AttributeError(name)
Where is this tested? The error below seems to be coming from somewhere 
else?
> +        return getattr(self.values, name)
>   
>   def showlist(name, values, plural=None, element=None, **args):
>       if not element:
> 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
> @@ -2286,6 +2286,14 @@ Test branches inside if statement:
>     $ hg log -r 0 --template '{if(branches, "yes", "no")}\n'
>     no
>   
> +Test get function:
> +
> +  $ hg log -r 0 --template '{get(extras, "branch")}\n'
> +  default
> +  $ hg log -r 0 --template '{get(files, "should_fail")}\n'
> +  hg: parse error: get() expects a dict as first argument
> +  [255]
> +
>   Test shortest(node) function:
>   
>     $ echo b > b
I have some qualms about the methods, but the end seems like there are 
some useful results.


More information about the Mercurial-devel mailing list