Mercurial > hg
changeset 33090:04b3743c1d7c
formatter: proxy fm.context() through converter
Otherwise nested template formatter would not see the context objects.
It's just a boolean flag now. We might want to change it to 'ctxs -> items'
function so changectx attributes are populated automatically in JSON, but
I'm not sure.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Mon, 26 Jun 2017 09:33:01 +0900 |
parents | 9e0d222f5687 |
children | 73dfc72704b6 |
files | mercurial/formatter.py |
diffstat | 1 files changed, 14 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/formatter.py Mon Jun 26 09:18:55 2017 +0900 +++ b/mercurial/formatter.py Mon Jun 26 09:33:01 2017 +0900 @@ -127,6 +127,10 @@ class _nullconverter(object): '''convert non-primitive data types to be processed by formatter''' + + # set to True if context object should be stored as item + storecontext = False + @staticmethod def formatdate(date, fmt): '''convert date tuple to appropriate format''' @@ -178,7 +182,10 @@ return self._converter.formatlist(data, name, fmt, sep) def context(self, **ctxs): '''insert context objects to be used to render template keywords''' - pass + ctxs = pycompat.byteskwargs(ctxs) + assert all(k == 'ctx' for k in ctxs) + if self._converter.storecontext: + self._item.update(ctxs) def data(self, **data): '''insert data into item that's not shown in default output''' data = pycompat.byteskwargs(data) @@ -228,6 +235,9 @@ class _plainconverter(object): '''convert non-primitive data types to text''' + + storecontext = False + @staticmethod def formatdate(date, fmt): '''stringify date tuple in the given format''' @@ -323,6 +333,9 @@ class _templateconverter(object): '''convert non-primitive data types to be processed by templater''' + + storecontext = True + @staticmethod def formatdate(date, fmt): '''return date tuple''' @@ -356,12 +369,6 @@ self._cache = {} # for templatekw/funcs to store reusable data self._renderitem('docheader', {}) - def context(self, **ctxs): - '''insert context objects to be used to render template keywords''' - ctxs = pycompat.byteskwargs(ctxs) - assert all(k == 'ctx' for k in ctxs) - self._item.update(ctxs) - def _showitem(self): item = self._item.copy() item['index'] = index = next(self._counter)