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

Yuya Nishihara yuya at tcha.org
Mon Mar 9 08:29:09 CDT 2015


On Mon, 9 Mar 2015 00:15:40 -0700, Ryan McElroy wrote:
> 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?

No test because there is no code that calls _hybrid.update(), keys(), pop(),
etc.

> > +  $ hg log -r 0 --template '{get(files, "should_fail")}\n'
> > +  hg: parse error: get() expects a dict as first argument
> > +  [255]

I wrote this to show that we can't implement _hybrid.get() instead of
__getattr__.

-    def __getattr__(self, name):
-        if name != 'get':
-            raise AttributeError(name)
-        return getattr(self.values, name)
+    def get(self, key):
+        return self.values.get(key)

Regards,


More information about the Mercurial-devel mailing list