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.
This commit is contained in:
Yuya Nishihara 2017-04-22 21:29:00 +09:00
parent b8fff410fd
commit 6b288f6b94
3 changed files with 39 additions and 0 deletions

View File

@ -453,6 +453,11 @@ def templatepartsmap(spec, t, partnames):
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):

View File

@ -117,6 +117,15 @@ another template::
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
========

View File

@ -544,6 +544,31 @@ template output:
{"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