Mercurial > public > mercurial-scm > hg-stable
diff mercurial/templatekw.py @ 33059:de8e3681c402
templatekw: expose color name in {namespaces} entries
Templates make use of a "log.<namespace>" label. The <namespace> value
here differs from the actual namespace name in that the namespace
itself is plural but the label/color value is singular.
Expose the color name to the templating layer so log.* labels
can be emitted for {namespaces}.
As part of this, we refactored the logic to eliminate a gnarly
comprehension. We store color names in their own dict because the
lookup can occur in tight loops and we shouldn't have to go to
repo.names[ns] multiple times for every changeset.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 24 Jun 2017 13:39:20 -0700 |
parents | c31d45623304 |
children | 46fa46608ca5 |
line wrap: on
line diff
--- a/mercurial/templatekw.py Sat Jun 24 12:47:25 2017 -0700 +++ b/mercurial/templatekw.py Sat Jun 24 13:39:20 2017 -0700 @@ -554,13 +554,24 @@ args = pycompat.byteskwargs(args) 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()) + + namespaces = util.sortdict() + colornames = {} + + for k, ns in repo.names.iteritems(): + namespaces[k] = showlist('name', ns.names(repo, ctx.node()), args) + colornames[k] = ns.colorname + f = _showlist('namespace', list(namespaces), args) - return _hybrid(f, namespaces, - lambda k: {'namespace': k, 'names': namespaces[k]}, - lambda x: x['namespace']) + + def makemap(ns): + return { + 'namespace': ns, + 'names': namespaces[ns], + 'colorname': colornames[ns], + } + + return _hybrid(f, namespaces, makemap, lambda x: x['namespace']) @templatekeyword('node') def shownode(repo, ctx, templ, **args):