changeset 24241:e7baf88c29c3

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.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 18 Feb 2015 23:17:52 +0900
parents bd504d90588d
children 3acb83c6c0f1
files mercurial/templatekw.py tests/test-command-template.t
diffstat 2 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/templatekw.py	Wed Feb 18 23:01:33 2015 +0900
+++ b/mercurial/templatekw.py	Wed Feb 18 23:17:52 2015 +0900
@@ -14,6 +14,7 @@
 #  "{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 @@
         return x in self.values
     def __len__(self):
         return len(self.values)
+    def __getattr__(self, name):
+        if name != 'get':
+            raise AttributeError(name)
+        return getattr(self.values, name)
 
 def showlist(name, values, plural=None, element=None, **args):
     if not element:
--- a/tests/test-command-template.t	Wed Feb 18 23:01:33 2015 +0900
+++ b/tests/test-command-template.t	Wed Feb 18 23:17:52 2015 +0900
@@ -2286,6 +2286,14 @@
   $ 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