templatekw: add {namespaces} keyword
This provides a general-purpose interface to all custom namespaces.
The {namespaces} keyword honors the definition order of namespaces as they
are kept by sortdict.
--- a/mercurial/templatekw.py Tue Jan 12 23:53:56 2016 +0900
+++ b/mercurial/templatekw.py Tue Jan 12 23:56:48 2016 +0900
@@ -421,6 +421,19 @@
names = ns.names(repo, ctx.node())
return showlist(ns.templatename, names, plural=namespace, **args)
+def shownamespaces(**args):
+ """:namespaces: Dict of lists. Names attached to this changeset per
+ namespace."""
+ ctx = args['ctx']
+ repo = ctx.repo()
+ namespaces = util.sortdict((k, showlist('name', ns.names(repo, ctx.node()),
+ **args))
+ for k, ns in repo.names.iteritems())
+ f = _showlist('namespace', list(namespaces), **args)
+ return _hybrid(f, namespaces,
+ lambda k: {'namespace': k, 'names': namespaces[k]},
+ lambda x: x['namespace'])
+
def shownode(repo, ctx, templ, **args):
""":node: String. The changeset identification hash, as a 40 hexadecimal
digit string.
@@ -537,6 +550,7 @@
'latesttag': showlatesttag,
'latesttagdistance': showlatesttagdistance,
'manifest': showmanifest,
+ 'namespaces': shownamespaces,
'node': shownode,
'p1rev': showp1rev,
'p1node': showp1node,
--- a/tests/test-command-template.t Tue Jan 12 23:53:56 2016 +0900
+++ b/tests/test-command-template.t Tue Jan 12 23:56:48 2016 +0900
@@ -3304,6 +3304,28 @@
1 f
0 f
+Test namespaces dict
+
+ $ hg log -T '{rev}{namespaces % " {namespace}={join(names, ",")}"}\n'
+ 2 bookmarks=bar,foo tags=tip branches=text.{rev}
+ 1 bookmarks=baz tags= branches=text.{rev}
+ 0 bookmarks= tags= branches=default
+ $ hg log -r2 -T '{namespaces % "{namespace}: {names}\n"}'
+ bookmarks: bar foo
+ tags: tip
+ branches: text.{rev}
+ $ hg log -r2 -T '{namespaces % "{namespace}:\n{names % " {name}\n"}"}'
+ bookmarks:
+ bar
+ foo
+ tags:
+ tip
+ branches:
+ text.{rev}
+ $ hg log -r2 -T '{get(namespaces, "bookmarks") % "{name}\n"}'
+ bar
+ foo
+
Test stringify on sub expressions
$ cd ..