Mercurial > hg
annotate mercurial/namespaces.py @ 28542:71e12fc53b80
ui: add new config flag for interface selection
This patch introduces a new config flag ui.interface to select the interface
for interactive commands. It currently only applies to chunks selection.
The config can be overridden on a per feature basis with the flag
ui.interface.<feature>.
features for the moment can only be 'chunkselector', moving forward we expect
to have 'histedit' and other commands there.
If an incorrect value is given to ui.interface we print a warning and use the
default interface: text. If HGPLAIN is specified we also use the default
interface: text.
Note that we fail quickly if a feature does not handle all the interfaces
that we permit in ui.interface; in future, we could design a fallback path
(e.g. blackpearl to curses, curses to text), but let's leave that until we
need it.
author | Simon Farnsworth <simonfar@fb.com> |
---|---|
date | Mon, 14 Mar 2016 15:01:27 +0000 |
parents | c0c89b2d07be |
children | ca52512ac709 |
rev | line source |
---|---|
25961
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
1 from __future__ import absolute_import |
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
2 |
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
3 from .i18n import _ |
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
4 from . import ( |
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
5 templatekw, |
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
6 util, |
c0c89b2d07be
namespaces: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24180
diff
changeset
|
7 ) |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
8 |
23555
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
9 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
|
10 """ |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
11 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
|
12 """ |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
13 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
|
14 return [] |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
15 else: |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
16 return [val] |
f08f6a7d4d5f
namespaces: add a function to turn single results into lists
Sean Farley <sean.michael.farley@gmail.com>
parents:
23554
diff
changeset
|
17 |
23553
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
18 class namespaces(object): |
23718
42908c3275c6
namespaces: update documentation and code indentation
Sean Farley <sean.michael.farley@gmail.com>
parents:
23717
diff
changeset
|
19 """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
|
20 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
|
21 |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
22 """ |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
23 |
7cebb6a8c75f
namespaces: introduce a generic way to map between names and nodes
Sean Farley <sean.michael.farley@gmail.com>
parents:
diff
changeset
|
24 _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
|
25 |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23559
diff
changeset
|
26 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
|
27 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
|
28 |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23557
diff
changeset
|
29 # 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
|
30 # 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
|
31 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
|
32 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
|
33 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
|
34 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
|
35 # 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
|
36 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
|
37 listnames=bmknames, |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
38 namemap=bmknamemap, nodemap=bmknodemap) |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
39 self.addnamespace(n) |
23562
59e703aecaf6
namespaces: add tags
Sean Farley <sean.michael.farley@gmail.com>
parents:
23561
diff
changeset
|
40 |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
41 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
|
42 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
|
43 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
|
44 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
|
45 # 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
|
46 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
|
47 listnames=tagnames, |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
48 namemap=tagnamemap, nodemap=tagnodemap, |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
49 deprecated=set(['tip'])) |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
50 self.addnamespace(n) |
23558
3198aac7a95d
namespaces: add bookmarks to the names data structure
Sean Farley <sean.michael.farley@gmail.com>
parents:
23557
diff
changeset
|
51 |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
52 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
|
53 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
|
54 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
|
55 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
|
56 # 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
|
57 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
|
58 listnames=bnames, |
23873
9ef234021667
namespaces: use named args for namespace api
Sean Farley <sean.michael.farley@gmail.com>
parents:
23872
diff
changeset
|
59 namemap=bnamemap, nodemap=bnodemap) |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
60 self.addnamespace(n) |
23563
114992041625
namespaces: add branches
Sean Farley <sean.michael.farley@gmail.com>
parents:
23562
diff
changeset
|
61 |
23736
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
62 def __getitem__(self, namespace): |
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
63 """returns the namespace object""" |
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
64 return self._names[namespace] |
d7324c242c3f
namespaces: add __getitem__ property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23718
diff
changeset
|
65 |
23761
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
66 def __iter__(self): |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
67 return self._names.__iter__() |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
68 |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
69 def iteritems(self): |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
70 return self._names.iteritems() |
19d6271a70db
namespaces: add __iter__ and iteritems methods
Sean Farley <sean.michael.farley@gmail.com>
parents:
23760
diff
changeset
|
71 |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
72 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
|
73 """register a namespace |
23554
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
74 |
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
75 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
|
76 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
|
77 (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
|
78 |
23554
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
79 """ |
75f9643cab1b
namespaces: add a method to register new namespaces
Sean Farley <sean.michael.farley@gmail.com>
parents:
23553
diff
changeset
|
80 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
|
81 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
|
82 else: |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
83 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
|
84 |
23610
9266d1dd6a6e
namespaces: generate template keyword when registering a namespace
Sean Farley <sean.michael.farley@gmail.com>
parents:
23608
diff
changeset
|
85 # 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
|
86 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
|
87 def generatekw(**args): |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
88 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
|
89 |
23717
d8663e6153c1
namespaces: use namespace object instead of dictionary
Sean Farley <sean.michael.farley@gmail.com>
parents:
23716
diff
changeset
|
90 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
|
91 |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23559
diff
changeset
|
92 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
|
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 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
|
95 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
|
96 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
|
97 |
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 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
|
99 """ |
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 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
|
101 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
|
102 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
|
103 # 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
|
104 if len(n) > 1: |
23561
3c2419e07df5
namespaces: remove weakref; always pass in repo
Ryan McElroy <rmcelroy@fb.com>
parents:
23559
diff
changeset
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
111 class namespace(object): |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
112 """provides an interface to a namespace |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
113 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
114 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
|
115 (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
|
116 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
|
117 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
|
118 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
119 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
|
120 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
|
121 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
122 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
|
123 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
|
124 and not raise an error. |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
125 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
126 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
|
127 'name': the namespace (plural form) |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
128 '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
|
129 of the plural namespace name) |
23760
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
130 '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
|
131 dictionary) |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
132 '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
|
133 '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
|
134 '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
|
135 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
136 """ |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
137 |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
138 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
|
139 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
|
140 deprecated=None): |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
141 """create a namespace |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
142 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
143 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
|
144 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
|
145 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
|
146 is used |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
147 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
|
148 logname is used |
24180
d8e0c591781c
spelling: fixes from proofreading of spell checker issues
Mads Kiilerich <madski@unity3d.com>
parents:
24151
diff
changeset
|
149 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
|
150 it is composed from logname |
23760
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
151 listnames: function to list all names |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
156 """ |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
157 self.name = name |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
158 self.templatename = templatename |
23874
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
159 self.logname = logname |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
160 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
|
161 self.logfmt = logfmt |
23760
50229b4c33be
namespaces: add 'listnames' property
Sean Farley <sean.michael.farley@gmail.com>
parents:
23739
diff
changeset
|
162 self.listnames = listnames |
23715
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
163 self.namemap = namemap |
eee55c09010a
namespaces: add a namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23610
diff
changeset
|
164 self.nodemap = nodemap |
23716
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
165 |
23874
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
166 # 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
|
167 if self.logname is None: |
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
168 self.logname = self.templatename |
fef1146b8442
namespaces: add logname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23873
diff
changeset
|
169 |
23875
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
170 # 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
|
171 if self.colorname is None: |
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
172 self.colorname = self.logname |
e573dd08aeaf
namespaces: add colorname member to namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23874
diff
changeset
|
173 |
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
|
174 # 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
|
175 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
|
176 # 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
|
177 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
|
178 |
24151
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
179 if deprecated is None: |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
180 self.deprecated = set() |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
181 else: |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
182 self.deprecated = deprecated |
38824c53c2f1
revset: mask specific names for named() predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23967
diff
changeset
|
183 |
23716
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
184 def names(self, repo, node): |
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
185 """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
|
186 match a given node""" |
f4828a8f6ae9
namespaces: copy implementation to new namespace object
Sean Farley <sean.michael.farley@gmail.com>
parents:
23715
diff
changeset
|
187 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
|
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 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
|
190 """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
|
191 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
|
192 |
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
|
193 """ |
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
|
194 return sorted(self.namemap(repo, name)) |