Patchwork [1,of,7,V2] namespaces: add template name of a namespace

login
register
mail settings
Submitter Sean Farley
Date Dec. 18, 2014, 9:10 p.m.
Message ID <5b61f147d886111e0e78.1418937045@laptop.local>
Download mbox | patch
Permalink /patch/7173/
State Accepted
Headers show

Comments

Sean Farley - Dec. 18, 2014, 9:10 p.m.
# HG changeset patch
# User Sean Farley <sean.michael.farley@gmail.com>
# Date 1418630992 28800
#      Mon Dec 15 00:09:52 2014 -0800
# Node ID 5b61f147d886111e0e783b01342e864af67e2af7
# Parent  39cead85fd58ae6693592074656b284ed736d9bc
namespaces: add template name of a namespace

The template name property will be used in upcoming patches to automatically
generate a template keyword. For example, given a namespace called 'babars', we
will automatically generate a template keyword 'babar' such that we can use it
in the following way,

$ hg log -r . -T '{babars % "King: {babar}\n"}'

Patch

diff --git a/mercurial/namespaces.py b/mercurial/namespaces.py
--- a/mercurial/namespaces.py
+++ b/mercurial/namespaces.py
@@ -24,10 +24,12 @@  class namespaces(object):
     not be in its domain. In this case, each method should return an empty list
     and not raise an error.
 
     We'll have a dictionary '_names' where each key is a namespace and
     its value is a dictionary of functions:
+      'templatename': name to use for templating (usually the singular form
+                      of the plural namespace name)
       'namemap': function that takes a name and returns a list of nodes
     """
 
     _names_version = 0
 
@@ -36,29 +38,31 @@  class namespaces(object):
 
         addns = self.addnamespace
 
         # we need current mercurial named objects (bookmarks, tags, and
         # branches) to be initialized somewhere, so that place is here
-        addns("bookmarks",
+        addns("bookmarks", "bookmark",
               lambda repo, name: tolist(repo._bookmarks.get(name)))
 
-        addns("tags",
+        addns("tags", "tag",
               lambda repo, name: tolist(repo._tagscache.tags.get(name)))
 
-        addns("branches",
+        addns("branches", "branch",
               lambda repo, name: tolist(repo.branchtip(name)))
 
-    def addnamespace(self, namespace, namemap, order=None):
+    def addnamespace(self, namespace, templatename, namemap, order=None):
         """
         register a namespace
 
         namespace: the name to be registered (in plural form)
+        templatename: the name to use for templating
         namemap: function that inputs a node, output name(s)
         order: optional argument to specify the order of namespaces
                (e.g. 'branches' should be listed before 'bookmarks')
         """
-        val = {'namemap': namemap}
+        val = {'templatename': templatename,
+               'namemap': namemap}
         if order is not None:
             self._names.insert(order, namespace, val)
         else:
             self._names[namespace] = val