Mercurial > hg
annotate mercurial/namespaces.py @ 25005:5ddbb024c2e9
tests: fix hidden repeatability problem with age filter test
This test was corrupting later cases in mysterious ways because the
hash of the changeset was changing every day at midnight. This made it
hard to figure out why tests were consistently breaking after they
were consistently working.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 12 May 2015 12:33:42 -0500 |
parents | d8e0c591781c |
children | c0c89b2d07be |
rev | line source |
---|---|
23559
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
1 from i18n import _ |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
2 from mercurial import util |
23610
9266d1dd6a6e
namespaces: generate template keyword when registering a namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23608
diff
changeset
|
3 import templatekw |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
4 |
23555
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
5 def tolist(val): |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
6 """ |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
7 a convenience method to return an empty list instead of None |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
8 """ |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
9 if val is None: |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
10 return [] |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
11 else: |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
12 return [val] |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
13 |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
14 class namespaces(object): |
23718
42908c3275c6
namespaces: update documentation and code indentation
Sean Farley <sean.michael.farley@gmail.com>
parents:
23717
diff
changeset
|
15 """provides an interface to register and operate on multiple namespaces. See |
42908c3275c6
namespaces: update documentation and code indentation
Sean Farley <sean.michael.farley@gmail.com>
parents:
23717
diff
changeset
|
16 the namespace class below for details on the namespace object. |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
17 |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
18 """ |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
19 |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
20 _names_version = 0 |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
21 |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23559
diff
changeset
|
22 def __init__(self): |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
23 self._names = util.sortdict() |
23554
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
24 |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23557
diff
changeset
|
25 # we need current mercurial named objects (bookmarks, tags, and |
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23557
diff
changeset
|
26 # branches) to be initialized somewhere, so that place is here |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
27 bmknames = lambda repo: repo._bookmarks.keys() |
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
28 bmknamemap = lambda repo, name: tolist(repo._bookmarks.get(name)) |
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
29 bmknodemap = lambda repo, name: repo.nodebookmarks(name) |
23967
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
30 n = namespace("bookmarks", templatename="bookmark", |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
31 # i18n: column positioning for "hg log" |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
32 logfmt=_("bookmark: %s\n"), |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
33 listnames=bmknames, |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
34 namemap=bmknamemap, nodemap=bmknodemap) |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
35 self.addnamespace(n) |
23562
59e703aecaf6
namespaces: add tags
Sean Farley <sean.michael.farley@gmail.com>
parents:
23561
diff
changeset
|
36 |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
37 tagnames = lambda repo: [t for t, n in repo.tagslist()] |
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
38 tagnamemap = lambda repo, name: tolist(repo._tagscache.tags.get(name)) |
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
39 tagnodemap = lambda repo, name: repo.nodetags(name) |
23967
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
40 n = namespace("tags", templatename="tag", |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
41 # i18n: column positioning for "hg log" |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
42 logfmt=_("tag: %s\n"), |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
43 listnames=tagnames, |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
44 namemap=tagnamemap, nodemap=tagnodemap, |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
45 deprecated=set(['tip'])) |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
46 self.addnamespace(n) |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23557
diff
changeset
|
47 |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
48 bnames = lambda repo: repo.branchmap().keys() |
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
49 bnamemap = lambda repo, name: tolist(repo.branchtip(name, True)) |
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
50 bnodemap = lambda repo, node: [repo[node].branch()] |
23967
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
51 n = namespace("branches", templatename="branch", |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
52 # i18n: column positioning for "hg log" |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
53 logfmt=_("branch: %s\n"), |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
54 listnames=bnames, |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
55 namemap=bnamemap, nodemap=bnodemap) |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
56 self.addnamespace(n) |
23563
114992041625
namespaces: add branches
Sean Farley <sean.michael.farley@gmail.com>
parents:
23562
diff
changeset
|
57 |
23736
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
58 def __getitem__(self, namespace): |
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
59 """returns the namespace object""" |
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
60 return self._names[namespace] |
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
61 |
23761
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
62 def __iter__(self): |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
63 return self._names.__iter__() |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
64 |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
65 def iteritems(self): |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
66 return self._names.iteritems() |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
67 |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
68 def addnamespace(self, namespace, order=None): |
23718
42908c3275c6
namespaces: update documentation and code indentation
Sean Farley <sean.michael.farley@gmail.com>
parents:
23717
diff
changeset
|
69 """register a namespace |
23554
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
70 |
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
71 namespace: the name to be registered (in plural form) |
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
72 order: optional argument to specify the order of namespaces |
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
73 (e.g. 'branches' should be listed before 'bookmarks') |
23718
42908c3275c6
namespaces: update documentation and code indentation
Sean Farley <sean.michael.farley@gmail.com>
parents:
23717
diff
changeset
|
74 |
23554
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
75 """ |
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
76 if order is not None: |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
77 self._names.insert(order, namespace.name, namespace) |
23554
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
78 else: |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
79 self._names[namespace.name] = namespace |
23559
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
80 |
23610
9266d1dd6a6e
namespaces: generate template keyword when registering a namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23608
diff
changeset
|
81 # we only generate a template keyword if one does not already exist |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
82 if namespace.name not in templatekw.keywords: |
23610
9266d1dd6a6e
namespaces: generate template keyword when registering a namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23608
diff
changeset
|
83 def generatekw(**args): |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
84 return templatekw.shownames(namespace.name, **args) |
23610
9266d1dd6a6e
namespaces: generate template keyword when registering a namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23608
diff
changeset
|
85 |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
86 templatekw.keywords[namespace.name] = generatekw |
23610
9266d1dd6a6e
namespaces: generate template keyword when registering a namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23608
diff
changeset
|
87 |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23559
diff
changeset
|
88 def singlenode(self, repo, name): |
23559
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
89 """ |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
90 Return the 'best' node for the given name. Best means the first node |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
91 in the first nonempty list returned by a name-to-nodes mapping function |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
92 in the defined precedence order. |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
93 |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
94 Raises a KeyError if there is no such node. |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
95 """ |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
96 for ns, v in self._names.iteritems(): |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
97 n = v.namemap(repo, name) |
23559
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
98 if n: |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
99 # return max revision number |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
100 if len(n) > 1: |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23559
diff
changeset
|
101 cl = repo.changelog |
23559
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
102 maxrev = max(cl.rev(node) for node in n) |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
103 return cl.node(maxrev) |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
104 return n[0] |
3b3a962e3677
namespaces: add a method to the first matching node for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23558
diff
changeset
|
105 raise KeyError(_('no such name: %s') % name) |
23606
80e3cbe227d1
namespaces: add method to get template name of namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23605
diff
changeset
|
106 |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
107 class namespace(object): |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
108 """provides an interface to a namespace |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
109 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
110 Namespaces are basically generic many-to-many mapping between some |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
111 (namespaced) names and nodes. The goal here is to control the pollution of |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
112 jamming things into tags or bookmarks (in extension-land) and to simplify |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
113 internal bits of mercurial: log output, tab completion, etc. |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
114 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
115 More precisely, we define a mapping of names to nodes, and a mapping from |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
116 nodes to names. Each mapping returns a list. |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
117 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
118 Furthermore, each name mapping will be passed a name to lookup which might |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
119 not be in its domain. In this case, each method should return an empty list |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
120 and not raise an error. |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
121 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
122 This namespace object will define the properties we need: |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
123 'name': the namespace (plural form) |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
124 'templatename': name to use for templating (usually the singular form |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
125 of the plural namespace name) |
23760
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
126 'listnames': list of all names in the namespace (usually the keys of a |
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
127 dictionary) |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
128 'namemap': function that takes a name and returns a list of nodes |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
129 'nodemap': function that takes a node and returns a list of names |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
130 'deprecated': set of names to be masked for ordinary use |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
131 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
132 """ |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
133 |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
134 def __init__(self, name, templatename=None, logname=None, colorname=None, |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
135 logfmt=None, listnames=None, namemap=None, nodemap=None, |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
136 deprecated=None): |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
137 """create a namespace |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
138 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
139 name: the namespace to be registered (in plural form) |
23872
9f48242929a9
namespaces: make the constructor into named args
Sean Farley <sean.michael.farley@gmail.com>
parents:
23775
diff
changeset
|
140 templatename: the name to use for templating |
23874
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
141 logname: the name to use for log output; if not specified templatename |
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
142 is used |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
143 colorname: the name to use for colored log output; if not specified |
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
144 logname is used |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24151
diff
changeset
|
145 logfmt: the format to use for (i18n-ed) log output; if not specified |
23967
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
146 it is composed from logname |
23760
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
147 listnames: function to list all names |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
148 namemap: function that inputs a node, output name(s) |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
149 nodemap: function that inputs a name, output node(s) |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
150 deprecated: set of names to be masked for ordinary use |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
151 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
152 """ |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
153 self.name = name |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
154 self.templatename = templatename |
23874
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
155 self.logname = logname |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
156 self.colorname = colorname |
23967
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
157 self.logfmt = logfmt |
23760
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
158 self.listnames = listnames |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
159 self.namemap = namemap |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
160 self.nodemap = nodemap |
23716
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
161 |
23874
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
162 # if logname is not specified, use the template name as backup |
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
163 if self.logname is None: |
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
164 self.logname = self.templatename |
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
165 |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
166 # if colorname is not specified, just use the logname as a backup |
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
167 if self.colorname is None: |
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
168 self.colorname = self.logname |
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
169 |
23967
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
170 # if logfmt is not specified, compose it from logname as backup |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
171 if self.logfmt is None: |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
172 # i18n: column positioning for "hg log" |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
173 self.logfmt = ("%s:" % self.logname).ljust(13) + "%s\n" |
448bb32b8ee6
namespace: introduce logfmt to show l10n-ed messages for hg log correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23875
diff
changeset
|
174 |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
175 if deprecated is None: |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
176 self.deprecated = set() |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
177 else: |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
178 self.deprecated = deprecated |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
179 |
23716
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
180 def names(self, repo, node): |
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
181 """method that returns a (sorted) list of names in a namespace that |
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
182 match a given node""" |
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
183 return sorted(self.nodemap(repo, node)) |
23774
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
184 |
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
185 def nodes(self, repo, name): |
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
186 """method that returns a list of nodes in a namespace that |
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
187 match a given name. |
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
188 |
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
189 """ |
b9537ee87961
namespaces: add method to return a list of nodes for a given name
Sean Farley <sean.michael.farley@gmail.com>
parents:
23761
diff
changeset
|
190 return sorted(self.namemap(repo, name)) |