# HG changeset patch # User Matt Mackall # Date 2015-06-10 19:29:13 # Node ID c2a4dfe2a336e704703239d68ace8e1aab449206 # Parent dd511b5cb81812fdad909820b35e75d48c2022d7 formatter: move most of template option helper to formatter We want to share this function between formatter and cmdutils. It doesn't belong in templater because it imports knowledge of ui layers that shouldn't be there. We'd prefer cmdutil to layer on the formatter rather than vice-versa. Since the formatter is the handler for -T options for all non-log commands, let's move the helper there. We leave the bits specific to the old --style option behind. diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -14,6 +14,7 @@ import context, repair, graphmod, revset import changelog import bookmarks import encoding +import formatter import crecord as crecordmod import lock as lockmod @@ -1493,40 +1494,7 @@ def gettemplate(ui, tmpl, style): if not tmpl: return None, None - # looks like a literal template? - if '{' in tmpl: - return tmpl, None - - # perhaps a stock style? - if not os.path.split(tmpl)[0]: - mapname = (templater.templatepath('map-cmdline.' + tmpl) - or templater.templatepath(tmpl)) - if mapname and os.path.isfile(mapname): - return None, mapname - - # perhaps it's a reference to [templates] - t = ui.config('templates', tmpl) - if t: - try: - tmpl = templater.unquotestring(t) - except SyntaxError: - tmpl = t - return tmpl, None - - if tmpl == 'list': - ui.write(_("available styles: %s\n") % templater.stylelist()) - raise util.Abort(_("specify a template")) - - # perhaps it's a path to a map or a template - if ('/' in tmpl or '\\' in tmpl) and os.path.isfile(tmpl): - # is it a mapfile for a style? - if os.path.basename(tmpl).startswith("map-"): - return None, os.path.realpath(tmpl) - tmpl = open(tmpl).read() - return tmpl, None - - # constant string? - return tmpl, None + return formatter.lookuptemplate(ui, 'changeset', tmpl) def show_changeset(ui, repo, opts, buffered=False): """show one changeset using template or regular display. diff --git a/mercurial/formatter.py b/mercurial/formatter.py --- a/mercurial/formatter.py +++ b/mercurial/formatter.py @@ -9,6 +9,8 @@ import cPickle from node import hex, short from i18n import _ import encoding, util +import templater +import os class baseformatter(object): def __init__(self, ui, topic, opts): @@ -133,6 +135,42 @@ class jsonformatter(baseformatter): baseformatter.end(self) self._ui.write("\n]\n") +def lookuptemplate(ui, topic, tmpl): + # looks like a literal template? + if '{' in tmpl: + return tmpl, None + + # perhaps a stock style? + if not os.path.split(tmpl)[0]: + mapname = (templater.templatepath('map-cmdline.' + tmpl) + or templater.templatepath(tmpl)) + if mapname and os.path.isfile(mapname): + return None, mapname + + # perhaps it's a reference to [templates] + t = ui.config('templates', tmpl) + if t: + try: + tmpl = templater.unquotestring(t) + except SyntaxError: + tmpl = t + return tmpl, None + + if tmpl == 'list': + ui.write(_("available styles: %s\n") % templater.stylelist()) + raise util.Abort(_("specify a template")) + + # perhaps it's a path to a map or a template + if ('/' in tmpl or '\\' in tmpl) and os.path.isfile(tmpl): + # is it a mapfile for a style? + if os.path.basename(tmpl).startswith("map-"): + return None, os.path.realpath(tmpl) + tmpl = open(tmpl).read() + return tmpl, None + + # constant string? + return tmpl, None + def formatter(ui, topic, opts): template = opts.get("template", "") if template == "json":