Mercurial > hg
comparison mercurial/namespaces.py @ 23553:7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
This patch begins the work to provide a way to register a namespace to handle
'names'. Benefits of this would be,
- improved templating: This would provide {name} which could output any branch,
bookmark, tag, or any extension registered namespace all without having the
extension doing any extra work
- improved tab completion: Since this provides a single source of all 'names',
tab completion would not need to know of each namespace
- changeset lookup: Similar to before, a unified place to get all 'names' will
allow finding changesets without any extension code having to reimplement
this
Also, d226fe36e362 has shown us that for internal code which expects a certain
type of method or behavior, we should provide an easy way for extensions to
check this behavior.
author | Sean Farley <sean.michael.farley@gmail.com> |
---|---|
date | Sun, 14 Dec 2014 12:29:28 -0800 |
parents | |
children | 75f9643cab1b |
comparison
equal
deleted
inserted
replaced
23552:72319005f5fb | 23553:7cebb6a8c75f |
---|---|
1 from mercurial import util | |
2 | |
3 class namespaces(object): | |
4 """ | |
5 provides an interface to register a generic many-to-many mapping between | |
6 some (namespaced) names and nodes. The goal here is to control the | |
7 pollution of jamming things into tags or bookmarks (in extension-land) and | |
8 to simplify internal bits of mercurial: log output, tab completion, etc. | |
9 | |
10 More precisely, we define a list of names (the namespace) and a mapping of | |
11 names to nodes. This name mapping returns a list of nodes. | |
12 | |
13 Furthermore, each name mapping will be passed a name to lookup which might | |
14 not be in its domain. In this case, each method should return an empty list | |
15 and not raise an error. | |
16 | |
17 We'll have a dictionary '_names' where each key is a namespace and | |
18 its value is a dictionary of functions: | |
19 'namemap': function that takes a name and returns a list of nodes | |
20 """ | |
21 | |
22 _names_version = 0 | |
23 | |
24 def __init__(self): | |
25 self._names = util.sortdict() |