[PATCH] namespaces: add logname member to namespace object

Sean Farley sean.michael.farley at gmail.com
Thu Jan 15 00:49:25 UTC 2015


# HG changeset patch
# User Sean Farley <sean.michael.farley at gmail.com>
# 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])


More information about the Mercurial-devel mailing list