templatekw: allow accessing to nested namespace item by its template name
Since we have the dot operator, it makes more sense to write
{namespaces.tags % "{tag}"}
instead of
{namespaces.tags % "{name}"}
--- a/mercurial/templatekw.py Sat Sep 30 08:50:24 2017 +0100
+++ b/mercurial/templatekw.py Sat Sep 30 08:57:50 2017 +0100
@@ -618,9 +618,14 @@
repo = ctx.repo()
namespaces = util.sortdict()
+ def makensmapfn(ns):
+ # 'name' for iterating over namespaces, templatename for local reference
+ return lambda v: {'name': v, ns.templatename: v}
for k, ns in repo.names.iteritems():
- namespaces[k] = showlist('name', ns.names(repo, ctx.node()), args)
+ names = ns.names(repo, ctx.node())
+ f = _showlist('name', names, args)
+ namespaces[k] = _hybrid(f, names, makensmapfn(ns), pycompat.identity)
f = _showlist('namespace', list(namespaces), args)
--- a/tests/test-command-template.t Sat Sep 30 08:50:24 2017 +0100
+++ b/tests/test-command-template.t Sat Sep 30 08:57:50 2017 +0100
@@ -4130,6 +4130,9 @@
$ hg log -r2 -T '{get(namespaces, "bookmarks") % "{name}\n"}'
bar
foo
+ $ hg log -r2 -T '{namespaces.bookmarks % "{bookmark}\n"}'
+ bar
+ foo
Test stringify on sub expressions