From patchwork Thu Jan 15 00:49:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: namespaces: add logname member to namespace object From: Sean Farley X-Patchwork-Id: 7462 Message-Id: <0508ab9d59758c22fa96.1421282965@laptop.local> To: mercurial-devel@selenic.com Date: Wed, 14 Jan 2015 16:49:25 -0800 # HG changeset patch # User Sean Farley # Date 1421281900 28800 # Wed Jan 14 16:31:40 2015 -0800 # Node ID 0508ab9d59758c22fa968d3bc2a184c51dd2c7ff # Parent f6070d3a9cb89a50ae3112f7c3d22f4ccc5c4db7 namespaces: add logname member to namespace object Previously, there was no way to change the name used for 'hg log' output. This was inconvenient for extensions that want a template name longer than 12 characters (e.g. remotebookmarks) but a different name for 'hg log'. diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -914,16 +914,16 @@ class changeset_printer(object): for name, ns in self.repo.names.iteritems(): # branches has special logic already handled above, so here we just # skip it if name == 'branches': continue - # we will use the templatename as the color name since those two - # should be the same + # we will use the logname as the color name since those two should + # be the same for name in ns.names(self.repo, changenode): # i18n: column positioning for "hg log" - tname = _(("%s:" % ns.templatename).ljust(13) + "%s\n") % name - self.ui.write("%s" % tname, label='log.%s' % ns.templatename) + lname = _(("%s:" % ns.logname).ljust(13) + "%s\n") % name + self.ui.write("%s" % lname, label='log.%s' % ns.logname) if self.ui.debugflag: # i18n: column positioning for "hg log" self.ui.write(_("phase: %s\n") % _(ctx.phasestr()), label='log.phase') for parent in parents: diff --git a/mercurial/namespaces.py b/mercurial/namespaces.py --- a/mercurial/namespaces.py +++ b/mercurial/namespaces.py @@ -25,23 +25,23 @@ class namespaces(object): # shorten the class name for less indentation ns = namespace # we need current mercurial named objects (bookmarks, tags, and # branches) to be initialized somewhere, so that place is here - n = ns("bookmarks", "bookmark", + n = ns("bookmarks", "bookmark", "bookmark", lambda repo: repo._bookmarks.keys(), lambda repo, name: tolist(repo._bookmarks.get(name)), lambda repo, name: repo.nodebookmarks(name)) self.addnamespace(n) - n = ns("tags", "tag", + n = ns("tags", "tag", "tag", lambda repo: [t for t, n in repo.tagslist()], lambda repo, name: tolist(repo._tagscache.tags.get(name)), lambda repo, name: repo.nodetags(name)) self.addnamespace(n) - n = ns("branches", "branch", + n = ns("branches", "branch", "branch", lambda repo: repo.branchmap().keys(), lambda repo, name: tolist(repo.branchtip(name, True)), lambda repo, node: [repo[node].branch()]) self.addnamespace(n) @@ -118,22 +118,25 @@ class namespace(object): 'namemap': function that takes a name and returns a list of nodes 'nodemap': function that takes a node and returns a list of names """ - def __init__(self, name, templatename, listnames, namemap, nodemap): + def __init__(self, name, templatename, logname, listnames, namemap, + nodemap): """create a namespace name: the namespace to be registered (in plural form) listnames: function to list all names templatename: the name to use for templating + logname: the name to use for log output namemap: function that inputs a node, output name(s) nodemap: function that inputs a name, output node(s) """ self.name = name self.templatename = templatename + self.logname = logname self.listnames = listnames self.namemap = namemap self.nodemap = nodemap def names(self, repo, node): diff --git a/tests/test-log.t b/tests/test-log.t --- a/tests/test-log.t +++ b/tests/test-log.t @@ -1565,11 +1565,11 @@ Check that adding an arbitrary name show > """A small extension to test adding arbitrary names to a repo""" > from mercurial.namespaces import namespace > > def reposetup(ui, repo): > foo = {'foo': repo[0].node()} - > ns = namespace("bars", "bar", + > ns = namespace("bars", "bar", "bar", > lambda r: foo.keys(), > lambda r, name: foo.get(name), > lambda r, node: [name for name, n > in foo.iteritems() > if n == node])