Mercurial > hg
changeset 40475:8fa26f3baf30
templater: add wrapper for a single template mapping
This can be used to nest template mappings without inserting a sequence-like
layer. See the next patch for example.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Fri, 19 Oct 2018 21:11:30 +0900 |
parents | 2891ee3fcb86 |
children | 539efc88513b |
files | mercurial/templater.py mercurial/templateutil.py |
diffstat | 2 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templater.py Fri Oct 26 21:28:20 2018 +0900 +++ b/mercurial/templater.py Fri Oct 19 21:11:30 2018 +0900 @@ -49,6 +49,10 @@ represents mappings (i.e. a list of dicts), which may have default output format. +mappingdict + represents a single mapping (i.e. a dict), which may have default output + format. + mappedgenerator a lazily-evaluated list of byte strings, which is e.g. a result of % operation.
--- a/mercurial/templateutil.py Fri Oct 26 21:28:20 2018 +0900 +++ b/mercurial/templateutil.py Fri Oct 19 21:11:30 2018 +0900 @@ -472,6 +472,29 @@ def tobool(self, context, mapping): return bool(self._mappings) +class mappingdict(mappable, _mappingsequence): + """Wrapper for a single template mapping + + This isn't a sequence in a way that the underlying dict won't be iterated + as a dict, but shares most of the _mappingsequence functions. + """ + + def __init__(self, mapping, name=None, tmpl=None): + super(mappingdict, self).__init__(name, tmpl) + self._mapping = mapping + + def tomap(self, context): + return self._mapping + + def tobool(self, context, mapping): + # no idea when a template mapping should be considered an empty, but + # a mapping dict should have at least one item in practice, so always + # mark this as non-empty. + return True + + def tovalue(self, context, mapping): + return super(mappingdict, self).tovalue(context, mapping)[0] + class mappedgenerator(wrapped): """Wrapper for generator of strings which acts as a list