Mercurial > public > mercurial-scm > hg-stable
diff mercurial/templater.py @ 36985:255f635c3204
templater: convert resources to a table of callables for future extension
I'm going to add a full templating support to the annotate command. As the
annotate is a filectx-oriented command, we'll need a way to look up a ctx
from a bounded fctx only when necessary.
This is the minimal change to support that. I'm thinking of defining a proper
interface to look up template resources to fix other issues, but that isn't
ready yet.
(Changes from V1: just updated tests and patch descriptions.)
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 11 Mar 2018 21:05:29 +0900 |
parents | 521f6c7e1756 |
children | 036e4483d3a1 |
line wrap: on
line diff
--- a/mercurial/templater.py Sat Mar 17 21:46:17 2018 -0400 +++ b/mercurial/templater.py Sun Mar 11 21:05:29 2018 +0900 @@ -566,8 +566,8 @@ v = None if key in self._resources: v = mapping.get(key) - if v is None: - v = self._resources.get(key) + if v is None and key in self._resources: + v = self._resources[key](self, mapping, key) if v is None: raise templateutil.ResourceUnavailable( _('template resource not available: %s') % key) @@ -670,8 +670,9 @@ - ``filters``: a dict of functions to transform a value into another. - ``defaults``: a dict of symbol values/functions; may be overridden by a ``mapping`` dict. - - ``resources``: a dict of internal data (e.g. cache), inaccessible - from user template; may be overridden by a ``mapping`` dict. + - ``resources``: a dict of functions returning internal data + (e.g. cache), inaccessible from user template; may be overridden by + a ``mapping`` dict. - ``cache``: a dict of preloaded template fragments. - ``aliases``: a list of alias (name, replacement) pairs. @@ -691,7 +692,7 @@ self.filters = templatefilters.filters.copy() self.filters.update(filters) self.defaults = defaults - self._resources = {'templ': self} + self._resources = {'templ': lambda context, mapping, key: self} self._resources.update(resources) self._aliases = aliases self.minchunk, self.maxchunk = minchunk, maxchunk