# HG changeset patch # User Yuya Nishihara # Date 1488007618 -32400 # Node ID 48a8b2e5fe317b699594ca4116780f9814450a98 # Parent 41a9edc5d00f2b5744e1edaf2edaa10084099f53 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. diff -r 41a9edc5d00f -r 48a8b2e5fe31 mercurial/cmdutil.py --- 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 = {} diff -r 41a9edc5d00f -r 48a8b2e5fe31 mercurial/templater.py --- 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