Mercurial > hg-stable
changeset 36987:939e0983c1d9
formatter: unblock storing fctx as a template resource
To keep templateformatter._renderitem() simple, a repo instance is looked
through ctx if available. This is probably good for future subrepo support
where ctx.repo() may be different from the global repo.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 11 Mar 2018 21:26:15 +0900 |
parents | 036e4483d3a1 |
children | 66e64681e0a8 |
files | mercurial/formatter.py |
diffstat | 1 files changed, 19 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/formatter.py Sun Mar 11 21:12:02 2018 +0900 +++ b/mercurial/formatter.py Sun Mar 11 21:26:15 2018 +0900 @@ -188,7 +188,7 @@ 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) + assert all(k in {'ctx', 'fctx'} for k in ctxs) if self._converter.storecontext: self._item.update(ctxs) def data(self, **data): @@ -395,13 +395,11 @@ return ref = self._parts[part] - # TODO: add support for filectx props = {} # explicitly-defined fields precede templatekw props.update(item) - if 'ctx' in item: + if 'ctx' in item or 'fctx' in item: # but template resources must be always available - props['repo'] = props['ctx'].repo() props['revcache'] = {} props = pycompat.strkwargs(props) g = self._t(ref, **props) @@ -513,10 +511,25 @@ return v return resmap.get(key) + def getctx(context, mapping, key): + ctx = mapping.get('ctx') + if ctx is not None: + return ctx + fctx = mapping.get('fctx') + if fctx is not None: + return fctx.changectx() + + def getrepo(context, mapping, key): + ctx = getctx(context, mapping, 'ctx') + if ctx is not None: + return ctx.repo() + return getsome(context, mapping, key) + return { 'cache': getsome, - 'ctx': getsome, - 'repo': getsome, + 'ctx': getctx, + 'fctx': getsome, + 'repo': getrepo, 'revcache': getsome, # per-ctx cache; set later 'ui': getsome, }