changeset 32952:61b60b28c381

formatter: add support for parts map of [templates] section Unlike a mapfile whose template is looked up by spec -> mapfile -> topic, [templates] section is global. We use :sub-section syntax to define parts per template.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 22 Apr 2017 21:29:00 +0900
parents 050efe9a1644
children 6d79e9109908
files mercurial/formatter.py mercurial/help/templates.txt tests/test-branches.t
diffstat 3 files changed, 39 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/formatter.py	Sat Jun 17 16:32:20 2017 +0900
+++ b/mercurial/formatter.py	Sat Apr 22 21:29:00 2017 +0900
@@ -453,6 +453,11 @@
     partsmap = {spec.ref: spec.ref}  # initial ref must exist in t
     if spec.mapfile:
         partsmap.update((p, p) for p in partnames if p in t)
+    elif spec.ref:
+        for part in partnames:
+            ref = '%s:%s' % (spec.ref, part)  # select config sub-section
+            if ref in t:
+                partsmap[part] = ref
     return partsmap
 
 def loadtemplater(ui, spec, cache=None):
--- a/mercurial/help/templates.txt	Sat Jun 17 16:32:20 2017 +0900
+++ b/mercurial/help/templates.txt	Sat Apr 22 21:29:00 2017 +0900
@@ -117,6 +117,15 @@
 but be aware that the keywords cannot be overridden by templates. For example,
 a template defined as ``templates.rev`` cannot be referenced as ``{rev}``.
 
+A template defined in ``templates`` section may have sub templates which
+are inserted before/after/between items::
+
+  [templates]
+  myjson = ' {dict(rev, node|short)|json}'
+  myjson:docheader = '\{\n'
+  myjson:docfooter = '\n}\n'
+  myjson:separator = ',\n'
+
 Examples
 ========
 
--- a/tests/test-branches.t	Sat Jun 17 16:32:20 2017 +0900
+++ b/tests/test-branches.t	Sat Apr 22 21:29:00 2017 +0900
@@ -544,6 +544,31 @@
    {"branch": "default", "node": "19709c5a4e75"}
   }
 
+  $ cat <<'EOF' >> .hg/hgrc
+  > [templates]
+  > myjson = ' {dict(branch, node|short)|json}'
+  > myjson:docheader = '\{\n'
+  > myjson:docfooter = '\n}\n'
+  > myjson:separator = ',\n'
+  > EOF
+  $ hg branches -T myjson
+  {
+   {"branch": "b", "node": "e23b5505d1ad"},
+   {"branch": "a branch *", "node": "10ff5895aa57"}, (glob)
+   {"branch": "a", "node": "d8cbc61dbaa6"},
+   {"branch": "default", "node": "19709c5a4e75"}
+  }
+
+  $ cat <<'EOF' >> .hg/hgrc
+  > [templates]
+  > :docheader = 'should not be selected as a docheader for literal templates\n'
+  > EOF
+  $ hg branches -T '{branch}\n'
+  b
+  a branch name much longer than the default justification used by branches
+  a
+  default
+
 Tests of revision branch name caching
 
 We rev branch cache is updated automatically. In these tests we use a trick to