changeset 32969:050efe9a1644

changeset_templater: backport separator template from formatter As commented, this should be used with docheader and docfooter, not with header nor footer. That's one reason why no props are passed to templater when rendering a separator. (See map-cmdline.changelog to understand what the "header" is.)
author Yuya Nishihara <yuya@tcha.org>
date Sat, 17 Jun 2017 16:32:20 +0900
parents 5100ce217dfa
children 61b60b28c381
files mercurial/cmdutil.py tests/test-command-template.t
diffstat 2 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Sat Apr 22 21:50:51 2017 +0900
+++ b/mercurial/cmdutil.py	Sat Jun 17 16:32:20 2017 +0900
@@ -1587,7 +1587,8 @@
         self._tref = tmplspec.ref
         self._parts = {'header': '', 'footer': '',
                        tmplspec.ref: tmplspec.ref,
-                       'docheader': '', 'docfooter': ''}
+                       'docheader': '', 'docfooter': '',
+                       'separator': ''}
         if tmplspec.mapfile:
             # find correct templates for current mode, for backward
             # compatibility with 'log -v/-q/--debug' using a mapfile
@@ -1621,11 +1622,17 @@
         props['ctx'] = ctx
         props['repo'] = self.repo
         props['ui'] = self.repo.ui
-        props['index'] = next(self._counter)
+        props['index'] = index = next(self._counter)
         props['revcache'] = {'copies': copies}
         props['cache'] = self.cache
         props = pycompat.strkwargs(props)
 
+        # write separator, which wouldn't work well with the header part below
+        # since there's inherently a conflict between header (across items) and
+        # separator (per item)
+        if self._parts['separator'] and index > 0:
+            self.ui.write(templater.stringify(self.t(self._parts['separator'])))
+
         # write header
         if self._parts['header']:
             h = templater.stringify(self.t(self._parts['header'], **props))
--- a/tests/test-command-template.t	Sat Apr 22 21:50:51 2017 +0900
+++ b/tests/test-command-template.t	Sat Jun 17 16:32:20 2017 +0900
@@ -257,6 +257,20 @@
   summary:     third
   
 
+Test docheader, docfooter and separator in template map
+
+  $ cat <<'EOF' > map-myjson
+  > docheader = '\{\n'
+  > docfooter = '\n}\n'
+  > separator = ',\n'
+  > changeset = ' {dict(rev, node|short)|json}'
+  > EOF
+  $ hg log -l2 -T./map-myjson
+  {
+   {"node": "95c24699272e", "rev": 8},
+   {"node": "29114dbae42b", "rev": 7}
+  }
+
 Template should precede style option
 
   $ hg log -l1 --style default -T '{rev}\n'