mercurial/formatter.py
changeset 25511 c2a4dfe2a336
parent 24321 0a714a1f7d5c
child 25512 8463433c2689
--- a/mercurial/formatter.py	Wed Jun 10 22:08:15 2015 +0900
+++ b/mercurial/formatter.py	Wed Jun 10 14:29:13 2015 -0500
@@ -9,6 +9,8 @@
 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 @@
         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":