templater: add simple interface for unnamed template (API)
authorYuya Nishihara <yuya@tcha.org>
Sat, 22 Apr 2017 19:56:47 +0900
changeset 32873 2ecce24dfcd3
parent 32872 9fcb6df413c9
child 32874 dddba6f3e59c
templater: add simple interface for unnamed template (API) This provides a simpler API for callers which don't need full templating stack. Instead of storing the given template as the name specified by topic, use '' as the default template to be rendered.
mercurial/cmdutil.py
mercurial/debugcommands.py
mercurial/filemerge.py
mercurial/formatter.py
mercurial/templater.py
--- a/mercurial/cmdutil.py	Wed Jun 14 20:56:34 2017 -0400
+++ b/mercurial/cmdutil.py	Sat Apr 22 19:56:47 2017 +0900
@@ -2297,7 +2297,7 @@
         return templatekw.showgraphnode  # fast path for "{graphnode}"
 
     spec = templater.unquotestring(spec)
-    templ = formatter.maketemplater(ui, 'graphnode', spec)
+    templ = formatter.maketemplater(ui, spec)
     cache = {}
     if isinstance(displayer, changeset_templater):
         cache = displayer.cache  # reuse cache of slow templates
@@ -2309,7 +2309,7 @@
         props['repo'] = repo
         props['ui'] = repo.ui
         props['revcache'] = {}
-        return templater.stringify(templ('graphnode', **props))
+        return templ.render(props)
     return formatnode
 
 def displaygraph(ui, repo, dag, displayer, edgefn, getrenamed=None,
--- a/mercurial/debugcommands.py	Wed Jun 14 20:56:34 2017 -0400
+++ b/mercurial/debugcommands.py	Sat Apr 22 19:56:47 2017 +0900
@@ -2121,9 +2121,9 @@
             ui.note(("* expanded:\n"), templater.prettyformat(newtree), '\n')
 
     if revs is None:
-        k = 'debugtemplate'
-        t = formatter.maketemplater(ui, k, tmpl)
-        ui.write(templater.stringify(t(k, ui=ui, **props)))
+        t = formatter.maketemplater(ui, tmpl)
+        props['ui'] = ui
+        ui.write(t.render(props))
     else:
         displayer = cmdutil.makelogtemplater(ui, repo, tmpl)
         for r in revs:
--- a/mercurial/filemerge.py	Wed Jun 14 20:56:34 2017 -0400
+++ b/mercurial/filemerge.py	Sat Apr 22 19:56:47 2017 +0900
@@ -534,10 +534,10 @@
     props['templ'] = template
     props['ctx'] = ctx
     props['repo'] = repo
-    templateresult = template('conflictmarker', **props)
+    templateresult = template.render(props)
 
     label = ('%s:' % label).ljust(pad + 1)
-    mark = '%s %s' % (label, templater.stringify(templateresult))
+    mark = '%s %s' % (label, templateresult)
 
     if mark:
         mark = mark.splitlines()[0] # split for safety
@@ -566,7 +566,7 @@
     ui = repo.ui
     template = ui.config('ui', 'mergemarkertemplate', _defaultconflictmarker)
     template = templater.unquotestring(template)
-    tmpl = formatter.maketemplater(ui, 'conflictmarker', template)
+    tmpl = formatter.maketemplater(ui, template)
 
     pad = max(len(l) for l in labels)
 
--- a/mercurial/formatter.py	Wed Jun 14 20:56:34 2017 -0400
+++ b/mercurial/formatter.py	Sat Apr 22 19:56:47 2017 +0900
@@ -431,10 +431,13 @@
     assert not (spec.tmpl and spec.mapfile)
     if spec.mapfile:
         return templater.templater.frommapfile(spec.mapfile, cache=cache)
-    return maketemplater(ui, spec.ref, spec.tmpl, cache=cache)
+    return _maketemplater(ui, spec.ref, spec.tmpl, cache=cache)
 
-def maketemplater(ui, topic, tmpl, cache=None):
+def maketemplater(ui, tmpl, cache=None):
     """Create a templater from a string template 'tmpl'"""
+    return _maketemplater(ui, '', tmpl, cache=cache)
+
+def _maketemplater(ui, topic, tmpl, cache=None):
     aliases = ui.configitems('templatealias')
     t = templater.templater(cache=cache, aliases=aliases)
     if tmpl:
--- a/mercurial/templater.py	Wed Jun 14 20:56:34 2017 -0400
+++ b/mercurial/templater.py	Sat Apr 22 19:56:47 2017 +0900
@@ -1298,6 +1298,10 @@
                               (self.map[t][1], inst.args[1]))
         return self.cache[t]
 
+    def render(self, mapping):
+        """Render the default unnamed template and return result as string"""
+        return stringify(self('', **mapping))
+
     def __call__(self, t, **mapping):
         ttype = t in self.map and self.map[t][0] or 'default'
         if ttype not in self.ecache: