changeset 23715:eee55c09010a

namespaces: add a namespace object Currently, we use a dictionary object to store the namespace properties. This is python so let's use an object. This will allow us to be more flexible in our method signatures in the future.
author Sean Farley <sean.michael.farley@gmail.com>
date Fri, 19 Dec 2014 17:00:28 -0800
parents e3a0e7e21f54
children f4828a8f6ae9
files mercurial/namespaces.py
diffstat 1 files changed, 38 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/namespaces.py	Fri Jan 02 13:30:38 2015 +0100
+++ b/mercurial/namespaces.py	Fri Dec 19 17:00:28 2014 -0800
@@ -109,3 +109,41 @@
         """method that returns a (sorted) list of names in a namespace that
         match a given node"""
         return sorted(self._names[namespace]['nodemap'](repo, node))
+
+class namespace(object):
+    """provides an interface to a namespace
+
+    Namespaces are basically generic many-to-many mapping between some
+    (namespaced) names and nodes. The goal here is to control the pollution of
+    jamming things into tags or bookmarks (in extension-land) and to simplify
+    internal bits of mercurial: log output, tab completion, etc.
+
+    More precisely, we define a mapping of names to nodes, and a mapping from
+    nodes to names. Each mapping returns a list.
+
+    Furthermore, each name mapping will be passed a name to lookup which might
+    not be in its domain. In this case, each method should return an empty list
+    and not raise an error.
+
+    This namespace object will define the properties we need:
+      'name': the namespace (plural form)
+      '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
+      'nodemap': function that takes a node and returns a list of names
+
+    """
+
+    def __init__(self, name, templatename, namemap, nodemap):
+        """create a namespace
+
+        name: the namespace to be registered (in plural form)
+        templatename: the name to use for templating
+        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.namemap = namemap
+        self.nodemap = nodemap