# HG changeset patch # User Yuya Nishihara # Date 1535784738 -32400 # Node ID 713085b45810be2cf1fb58f11e44f59c95ac742e # Parent 34ecc0a09c76d31b5a3edaa86c934761a22da64f formatter: replace contexthint() with demand loading of ctx object And pass in repo instead to resolve ctx from (repo, node) pair. diff -r 34ecc0a09c76 -r 713085b45810 mercurial/bookmarks.py --- 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) diff -r 34ecc0a09c76 -r 713085b45810 mercurial/commands.py --- 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, diff -r 34ecc0a09c76 -r 713085b45810 mercurial/formatter.py --- 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]