formatter: replace contexthint() with demand loading of ctx object
And pass in repo instead to resolve ctx from (repo, node) pair.
--- a/mercurial/bookmarks.py Thu Jun 07 21:48:11 2018 +0900
+++ b/mercurial/bookmarks.py Sat Sep 01 15:52:18 2018 +0900
@@ -923,14 +923,12 @@
"""
opts = pycompat.byteskwargs(opts)
fm = ui.formatter('bookmarks', opts)
- contexthint = fm.contexthint('bookmark rev node active')
hexfn = fm.hexfunc
if len(bmarks) == 0 and fm.isplain():
ui.status(_("no bookmarks set\n"))
for bmark, (n, prefix, label) in sorted(bmarks.iteritems()):
fm.startitem()
- if 'ctx' in contexthint:
- fm.context(ctx=repo[n])
+ fm.context(repo=repo)
if not ui.quiet:
fm.plain(' %s ' % prefix, label=label)
fm.write('bookmark', '%s', bmark, label=label)
--- a/mercurial/commands.py Thu Jun 07 21:48:11 2018 +0900
+++ b/mercurial/commands.py Sat Sep 01 15:52:18 2018 +0900
@@ -5639,7 +5639,6 @@
opts = pycompat.byteskwargs(opts)
ui.pager('tags')
fm = ui.formatter('tags', opts)
- contexthint = fm.contexthint('tag rev node type')
hexfunc = fm.hexfunc
tagtype = ""
@@ -5652,8 +5651,7 @@
tagtype = 'local'
fm.startitem()
- if 'ctx' in contexthint:
- fm.context(ctx=repo[n])
+ fm.context(repo=repo)
fm.write('tag', '%s', t, label=label)
fmt = " " * (30 - encoding.colwidth(t)) + ' %5d:%s'
fm.condwrite(not ui.quiet, 'rev node', fmt,
--- a/mercurial/formatter.py Thu Jun 07 21:48:11 2018 +0900
+++ b/mercurial/formatter.py Sat Sep 01 15:52:18 2018 +0900
@@ -124,7 +124,6 @@
error,
pycompat,
templatefilters,
- templatefuncs,
templatekw,
templater,
templateutil,
@@ -193,9 +192,6 @@
# name is mandatory argument for now, but it could be optional if
# we have default template keyword, e.g. {item}
return self._converter.formatlist(data, name, fmt, sep)
- def contexthint(self, datafields):
- '''set of context object keys to be required given datafields set'''
- return set()
def context(self, **ctxs):
'''insert context objects to be used to render template keywords'''
ctxs = pycompat.byteskwargs(ctxs)
@@ -427,24 +423,6 @@
def _symbolsused(self):
return self._t.symbolsused(self._tref)
- def contexthint(self, datafields):
- '''set of context object keys to be required by the template, given
- datafields overridden by immediate values'''
- requires = set()
- ksyms, fsyms = self._symbolsused
- ksyms = ksyms - set(datafields.split()) # exclude immediate fields
- symtables = [(ksyms, templatekw.keywords),
- (fsyms, templatefuncs.funcs)]
- for syms, table in symtables:
- for k in syms:
- f = table.get(k)
- if not f:
- continue
- requires.update(getattr(f, '_requires', ()))
- if 'repo' in requires:
- requires.add('ctx') # there's no API to pass repo to formatter
- return requires & {'ctx', 'fctx'}
-
def datahint(self):
'''set of field names to be referenced from the template'''
return self._symbolsused[0]