Comments
Patch
@@ -94,14 +94,14 @@ Nested example:
>>> def subrepos(ui, fm):
... fm.startitem()
-... fm.write(b'repo', b'[%s]\\n', b'baz')
+... fm.write(b'reponame', b'[%s]\\n', b'baz')
... files(ui, fm.nested(b'files'))
... fm.end()
>>> show(subrepos)
[baz]
foo
bar
->>> show(subrepos, template=b'{repo}: {join(files % "{path}", ", ")}\\n')
+>>> show(subrepos, template=b'{reponame}: {join(files % "{path}", ", ")}\\n')
baz: foo, bar
"""
@@ -491,7 +491,9 @@ def templateresources(ui, repo=None):
and function"""
return {
'cache': {}, # for templatekw/funcs to store reusable data
+ 'ctx': None,
'repo': repo,
+ 'revcache': None, # per-ctx cache; set later
'ui': ui,
}
@@ -1320,7 +1320,9 @@ class engine(object):
def symbol(self, mapping, key):
"""Resolve symbol to value or function; None if nothing found"""
- v = mapping.get(key)
+ v = None
+ if key not in self._resources:
+ v = mapping.get(key)
if v is None:
v = self._defaults.get(key)
return v
@@ -1328,11 +1330,13 @@ class engine(object):
def resource(self, mapping, key):
"""Return internal data (e.g. cache) used for keyword/function
evaluation"""
- v = mapping.get(key)
+ v = None
+ if key in self._resources:
+ v = mapping.get(key)
if v is None:
v = self._resources.get(key)
if v is None:
- raise KeyError
+ raise error.Abort(_('template resource not available: %s') % key)
return v
def _load(self, t):
@@ -206,7 +206,13 @@ never cause crash:
Internal resources shouldn't be exposed (issue5699):
- $ hg log -r. -T '{cache}{repo}{templ}{ui}'
+ $ hg log -r. -T '{cache}{ctx}{repo}{revcache}{templ}{ui}'
+
+Never crash on internal resource not available:
+
+ $ hg --cwd .. debugtemplate '{"c0bebeef"|shortest}\n'
+ abort: template resource not available: ctx
+ [255]
Quoting for ui.logtemplate