templater: drop 'templ' from resources dict
Partially resolves cycle, templ -> context -> templ. This will make it easier
to replace the resources dict with new immutable resource mapper interface.
--- a/mercurial/templatekw.py Fri Mar 16 23:01:51 2018 +0900
+++ b/mercurial/templatekw.py Fri Mar 16 23:09:21 2018 +0900
@@ -35,19 +35,8 @@
compatlist = templateutil.compatlist
_showcompatlist = templateutil._showcompatlist
-# TODO: temporary hack for porting; will be removed soon
-class _fakecontextwrapper(object):
- def __init__(self, templ):
- self._templ = templ
-
- def preload(self, t):
- return t in self._templ
-
- def process(self, t, mapping):
- return self._templ.generatenamed(t, mapping)
-
def _showlist(name, values, templ, mapping, plural=None, separator=' '):
- context = _fakecontextwrapper(templ)
+ context = templ # this is actually a template context, not a templater
return _showcompatlist(context, mapping, name, values, plural, separator)
def showdict(name, data, mapping, plural=None, key='key', value='value',
--- a/mercurial/templater.py Fri Mar 16 23:01:51 2018 +0900
+++ b/mercurial/templater.py Fri Mar 16 23:09:21 2018 +0900
@@ -738,8 +738,7 @@
self.filters = templatefilters.filters.copy()
self.filters.update(filters)
self.defaults = defaults
- self._resources = {'templ': lambda context, mapping, key: self}
- self._resources.update(resources)
+ self._resources = resources
self._aliases = aliases
self.minchunk, self.maxchunk = minchunk, maxchunk
self.ecache = {}
--- a/mercurial/templateutil.py Fri Mar 16 23:01:51 2018 +0900
+++ b/mercurial/templateutil.py Fri Mar 16 23:09:21 2018 +0900
@@ -348,8 +348,11 @@
v = default
if callable(v) and getattr(v, '_requires', None) is None:
# old templatekw: expand all keywords and resources
+ # (TODO: deprecate this after porting web template keywords to new API)
props = {k: f(context, mapping, k)
for k, f in context._resources.items()}
+ # pass context to _showcompatlist() through templatekw._showlist()
+ props['templ'] = context
props.update(mapping)
return v(**pycompat.strkwargs(props))
if callable(v):