templater: port formatnode filter from changeset_templater
This slightly reduces the difference between changeset_templater and formatter,
and helps extending formatter to support changeset templating.
New formatnode() is not a template filter, but a function since a filter
cannot access to ui. And it's marked as DEPRECATED since I think it exists
only for compatibility reasons.
--- a/mercurial/cmdutil.py Mon Feb 13 00:05:55 2017 -0800
+++ b/mercurial/cmdutil.py Sat Feb 25 16:26:58 2017 +0900
@@ -1442,8 +1442,6 @@
def __init__(self, ui, repo, matchfn, diffopts, tmpl, mapfile, buffered):
changeset_printer.__init__(self, ui, repo, matchfn, diffopts, buffered)
- formatnode = ui.debugflag and (lambda x: x) or (lambda x: x[:12])
- filters = {'formatnode': formatnode}
defaulttempl = {
'parent': '{rev}:{node|formatnode} ',
'manifest': '{rev}:{node|formatnode}',
@@ -1455,11 +1453,10 @@
defaulttempl['filecopy'] = defaulttempl['file_copy']
assert not (tmpl and mapfile)
if mapfile:
- self.t = templater.templater.frommapfile(mapfile, filters=filters,
+ self.t = templater.templater.frommapfile(mapfile,
cache=defaulttempl)
else:
self.t = formatter.maketemplater(ui, 'changeset', tmpl,
- filters=filters,
cache=defaulttempl)
self.cache = {}
--- a/mercurial/templater.py Mon Feb 13 00:05:55 2017 -0800
+++ b/mercurial/templater.py Sat Feb 25 16:26:58 2017 +0900
@@ -544,6 +544,19 @@
return templatefilters.fill(text, width, initindent, hangindent)
+@templatefunc('formatnode(node)')
+def formatnode(context, mapping, args):
+ """Obtain the preferred form of a changeset hash. (DEPRECATED)"""
+ if len(args) != 1:
+ # i18n: "formatnode" is a keyword
+ raise error.ParseError(_("formatnode expects one argument"))
+
+ ui = mapping['ui']
+ node = evalstring(context, mapping, args[0])
+ if ui.debugflag:
+ return node
+ return templatefilters.short(node)
+
@templatefunc('pad(text, width[, fillchar=\' \'[, left=False]])')
def pad(context, mapping, args):
"""Pad text with a