[PATCH 4 of 4] templater: make _hybrid provide more list/dict-like methods
Yuya Nishihara
yuya at tcha.org
Tue Apr 4 16:00:59 UTC 2017
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1491312719 -32400
# Tue Apr 04 22:31:59 2017 +0900
# Node ID 236441d523b03a227a0562497cbd060f795d3e13
# Parent a78c9de39862cd089aaddd9536902c7c52dfe1e6
templater: make _hybrid provide more list/dict-like methods
So the JSON filter works.
diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py
--- a/mercurial/templatekw.py
+++ b/mercurial/templatekw.py
@@ -28,6 +28,7 @@ class _hybrid(object):
and to access raw values:
- "{ifcontains(file, files, ...)}", "{ifcontains(key, extras, ...)}"
- "{get(extras, key)}"
+ - "{files|json}"
"""
def __init__(self, gen, values, makemap, joinfmt):
@@ -43,8 +44,11 @@ class _hybrid(object):
return x in self._values
def __len__(self):
return len(self._values)
+ def __iter__(self):
+ return iter(self._values)
def __getattr__(self, name):
- if name != 'get':
+ if name not in ('get', 'items', 'iteritems', 'iterkeys', 'itervalues',
+ 'keys', 'values'):
raise AttributeError(name)
return getattr(self._values, name)
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
@@ -3392,6 +3392,13 @@ Test get function:
hg: parse error: get() expects a dict as first argument
[255]
+Test json filter applied to hybrid object:
+
+ $ hg log -r0 -T '{files|json}\n'
+ ["a"]
+ $ hg log -r0 -T '{extras|json}\n'
+ {"branch": "default"}
+
Test localdate(date, tz) function:
$ TZ=JST-09 hg log -r0 -T '{date|localdate|isodate}\n'
More information about the Mercurial-devel
mailing list