Mercurial > hg
annotate hgext/remotenames.py @ 41169:3ce5b96482c6
discovery: add a `iscomplete` method to the `partialdiscovery` object
The method is used by higher level logic to know if the initial discovery
question has been answered.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 28 Dec 2018 03:39:43 +0100 |
parents | fd4d59cf2ebb |
children | 3018749a71bb |
rev | line source |
---|---|
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1 # remotenames.py - extension to display remotenames |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
2 # |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2017 Augie Fackler <raf@durin42.com> |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
4 # Copyright 2017 Sean Farley <sean@farley.io> |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
5 # |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
8 |
37817
678ab0de7296
remotenames: mark the extension as EXPERIMENTAL
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37090
diff
changeset
|
9 """ showing remotebookmarks and remotebranches in UI (EXPERIMENTAL) |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
10 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
11 By default both remotebookmarks and remotebranches are turned on. Config knob to |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
12 control the individually are as follows. |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
13 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
14 Config options to tweak the default behaviour: |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
15 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
16 remotenames.bookmarks |
37089
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
17 Boolean value to enable or disable showing of remotebookmarks (default: True) |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
18 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
19 remotenames.branches |
37089
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
20 Boolean value to enable or disable showing of remotebranches (default: True) |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
21 |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
22 remotenames.hoistedpeer |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
23 Name of the peer whose remotebookmarks should be hoisted into the top-level |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
24 namespace (default: 'default') |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
25 """ |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
26 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
27 from __future__ import absolute_import |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
28 |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
29 from mercurial.i18n import _ |
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
30 |
36061
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
31 from mercurial.node import ( |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
32 bin, |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
33 ) |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
34 from mercurial import ( |
37090
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
35 bookmarks, |
40069
fd4d59cf2ebb
remotenames: abort if literal revset pattern matches nothing
Yuya Nishihara <yuya@tcha.org>
parents:
40068
diff
changeset
|
36 error, |
37090
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
37 extensions, |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
38 logexchange, |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
39 namespaces, |
36956
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
40 pycompat, |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
41 registrar, |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
42 revsetlang, |
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
43 smartset, |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
44 templateutil, |
40066
fe64178103b7
remotenames: use util.always instead of handcrafted lambda
Yuya Nishihara <yuya@tcha.org>
parents:
40065
diff
changeset
|
45 util, |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
46 ) |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
47 |
40059
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
48 from mercurial.utils import ( |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
49 stringutil, |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
50 ) |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
51 |
36956
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
52 if pycompat.ispy3: |
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
53 import collections.abc |
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
54 mutablemapping = collections.abc.MutableMapping |
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
55 else: |
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
56 import collections |
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
57 mutablemapping = collections.MutableMapping |
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
58 |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
59 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
60 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
61 # be specifying the version(s) of Mercurial they are tested with, or |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
62 # leave the attribute unspecified. |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
63 testedwith = 'ships-with-hg-core' |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
64 |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
65 configtable = {} |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
66 configitem = registrar.configitem(configtable) |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
67 templatekeyword = registrar.templatekeyword() |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
68 revsetpredicate = registrar.revsetpredicate() |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
69 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
70 configitem('remotenames', 'bookmarks', |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
71 default=True, |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
72 ) |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
73 configitem('remotenames', 'branches', |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
74 default=True, |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
75 ) |
37089
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
76 configitem('remotenames', 'hoistedpeer', |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
77 default='default', |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
78 ) |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
79 |
36956
b710fdebd0db
remotenames: work around move of ABCs in collections
Augie Fackler <augie@google.com>
parents:
36921
diff
changeset
|
80 class lazyremotenamedict(mutablemapping): |
36061
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
81 """ |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
82 Read-only dict-like Class to lazily resolve remotename entries |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
83 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
84 We are doing that because remotenames startup was slow. |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
85 We lazily read the remotenames file once to figure out the potential entries |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
86 and store them in self.potentialentries. Then when asked to resolve an |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
87 entry, if it is not in self.potentialentries, then it isn't there, if it |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
88 is in self.potentialentries we resolve it and store the result in |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
89 self.cache. We cannot be lazy is when asked all the entries (keys). |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
90 """ |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
91 def __init__(self, kind, repo): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
92 self.cache = {} |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
93 self.potentialentries = {} |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
94 self._kind = kind # bookmarks or branches |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
95 self._repo = repo |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
96 self.loaded = False |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
97 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
98 def _load(self): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
99 """ Read the remotenames file, store entries matching selected kind """ |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
100 self.loaded = True |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
101 repo = self._repo |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
102 for node, rpath, rname in logexchange.readremotenamefile(repo, |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
103 self._kind): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
104 name = rpath + '/' + rname |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
105 self.potentialentries[name] = (node, rpath, name) |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
106 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
107 def _resolvedata(self, potentialentry): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
108 """ Check that the node for potentialentry exists and return it """ |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
109 if not potentialentry in self.potentialentries: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
110 return None |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
111 node, remote, name = self.potentialentries[potentialentry] |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
112 repo = self._repo |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
113 binnode = bin(node) |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
114 # if the node doesn't exist, skip it |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
115 try: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
116 repo.changelog.rev(binnode) |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
117 except LookupError: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
118 return None |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
119 # Skip closed branches |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
120 if (self._kind == 'branches' and repo[binnode].closesbranch()): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
121 return None |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
122 return [binnode] |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
123 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
124 def __getitem__(self, key): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
125 if not self.loaded: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
126 self._load() |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
127 val = self._fetchandcache(key) |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
128 if val is not None: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
129 return val |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
130 else: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
131 raise KeyError() |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
132 |
36252
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
133 def __iter__(self): |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
134 return iter(self.potentialentries) |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
135 |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
136 def __len__(self): |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
137 return len(self.potentialentries) |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
138 |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
139 def __setitem__(self): |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
140 raise NotImplementedError |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
141 |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
142 def __delitem__(self): |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
143 raise NotImplementedError |
e37be270e163
remotenames: port partway to python3 by using collections.MutableMapping
Augie Fackler <augie@google.com>
parents:
36149
diff
changeset
|
144 |
36061
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
145 def _fetchandcache(self, key): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
146 if key in self.cache: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
147 return self.cache[key] |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
148 val = self._resolvedata(key) |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
149 if val is not None: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
150 self.cache[key] = val |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
151 return val |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
152 else: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
153 return None |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
154 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
155 def keys(self): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
156 """ Get a list of bookmark or branch names """ |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
157 if not self.loaded: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
158 self._load() |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
159 return self.potentialentries.keys() |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
160 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
161 def iteritems(self): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
162 """ Iterate over (name, node) tuples """ |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
163 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
164 if not self.loaded: |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
165 self._load() |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
166 |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
167 for k, vtup in self.potentialentries.iteritems(): |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
168 yield (k, [bin(vtup[0])]) |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
169 |
36463
1bd132a021dd
remotenames: don't inherit the remotenames class from dict class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36440
diff
changeset
|
170 class remotenames(object): |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
171 """ |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
172 This class encapsulates all the remotenames state. It also contains |
36061
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
173 methods to access that state in convenient ways. Remotenames are lazy |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
174 loaded. Whenever client code needs to ensure the freshest copy of |
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
175 remotenames, use the `clearnames` method to force an eventual load. |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
176 """ |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
177 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
178 def __init__(self, repo, *args): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
179 self._repo = repo |
36061
be72f6420f3c
remotenames: introduce a class to lazily resolve remotnames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36060
diff
changeset
|
180 self.clearnames() |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
181 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
182 def clearnames(self): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
183 """ Clear all remote names state """ |
36463
1bd132a021dd
remotenames: don't inherit the remotenames class from dict class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36440
diff
changeset
|
184 self.bookmarks = lazyremotenamedict("bookmarks", self._repo) |
1bd132a021dd
remotenames: don't inherit the remotenames class from dict class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36440
diff
changeset
|
185 self.branches = lazyremotenamedict("branches", self._repo) |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
186 self._invalidatecache() |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
187 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
188 def _invalidatecache(self): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
189 self._nodetobmarks = None |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
190 self._nodetobranch = None |
37089
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
191 self._hoisttonodes = None |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
192 self._nodetohoists = None |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
193 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
194 def bmarktonodes(self): |
36463
1bd132a021dd
remotenames: don't inherit the remotenames class from dict class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36440
diff
changeset
|
195 return self.bookmarks |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
196 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
197 def nodetobmarks(self): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
198 if not self._nodetobmarks: |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
199 bmarktonodes = self.bmarktonodes() |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
200 self._nodetobmarks = {} |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
201 for name, node in bmarktonodes.iteritems(): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
202 self._nodetobmarks.setdefault(node[0], []).append(name) |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
203 return self._nodetobmarks |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
204 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
205 def branchtonodes(self): |
36463
1bd132a021dd
remotenames: don't inherit the remotenames class from dict class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36440
diff
changeset
|
206 return self.branches |
36060
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
207 |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
208 def nodetobranch(self): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
209 if not self._nodetobranch: |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
210 branchtonodes = self.branchtonodes() |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
211 self._nodetobranch = {} |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
212 for name, nodes in branchtonodes.iteritems(): |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
213 for node in nodes: |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
214 self._nodetobranch.setdefault(node, []).append(name) |
cabe8ef5c71e
remotenames: introduce class to encapsulate remotenames info in an extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
215 return self._nodetobranch |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
216 |
37089
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
217 def hoisttonodes(self, hoist): |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
218 if not self._hoisttonodes: |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
219 marktonodes = self.bmarktonodes() |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
220 self._hoisttonodes = {} |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
221 hoist += '/' |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
222 for name, node in marktonodes.iteritems(): |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
223 if name.startswith(hoist): |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
224 name = name[len(hoist):] |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
225 self._hoisttonodes[name] = node |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
226 return self._hoisttonodes |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
227 |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
228 def nodetohoists(self, hoist): |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
229 if not self._nodetohoists: |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
230 marktonodes = self.bmarktonodes() |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
231 self._nodetohoists = {} |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
232 hoist += '/' |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
233 for name, node in marktonodes.iteritems(): |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
234 if name.startswith(hoist): |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
235 name = name[len(hoist):] |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
236 self._nodetohoists.setdefault(node[0], []).append(name) |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
237 return self._nodetohoists |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
238 |
39746
25cc5616adc9
bookmarks: pass in formatter to printbookmarks() instead of opts (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37983
diff
changeset
|
239 def wrapprintbookmarks(orig, ui, repo, fm, bmarks): |
37090
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
240 if 'remotebookmarks' not in repo.names: |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
241 return |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
242 ns = repo.names['remotebookmarks'] |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
243 |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
244 for name in ns.listnames(repo): |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
245 nodes = ns.nodes(repo, name) |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
246 if not nodes: |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
247 continue |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
248 node = nodes[0] |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
249 |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
250 bmarks[name] = (node, ' ', '') |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
251 |
39746
25cc5616adc9
bookmarks: pass in formatter to printbookmarks() instead of opts (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37983
diff
changeset
|
252 return orig(ui, repo, fm, bmarks) |
37090
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
253 |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
254 def extsetup(ui): |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
255 extensions.wrapfunction(bookmarks, '_printbookmarks', wrapprintbookmarks) |
a61fff493d98
remotenames: show remote bookmarks in `hg bookmarks`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37089
diff
changeset
|
256 |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
257 def reposetup(ui, repo): |
37983
b9e6b71dc272
remotenames: enable the storage config option if extension is enabled
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37817
diff
changeset
|
258 |
b9e6b71dc272
remotenames: enable the storage config option if extension is enabled
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37817
diff
changeset
|
259 # set the config option to store remotenames |
b9e6b71dc272
remotenames: enable the storage config option if extension is enabled
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37817
diff
changeset
|
260 repo.ui.setconfig('experimental', 'remotenames', True, 'remotenames-ext') |
b9e6b71dc272
remotenames: enable the storage config option if extension is enabled
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37817
diff
changeset
|
261 |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
262 if not repo.local(): |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
263 return |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
264 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
265 repo._remotenames = remotenames(repo) |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
266 ns = namespaces.namespace |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
267 |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
268 if ui.configbool('remotenames', 'bookmarks'): |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
269 remotebookmarkns = ns( |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
270 'remotebookmarks', |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
271 templatename='remotebookmarks', |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
272 colorname='remotebookmark', |
36264
18e29c65bc5c
remotenames: don't use the default value of logfmt for namespaces
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36252
diff
changeset
|
273 logfmt='remote bookmark: %s\n', |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
274 listnames=lambda repo: repo._remotenames.bmarktonodes().keys(), |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
275 namemap=lambda repo, name: |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
276 repo._remotenames.bmarktonodes().get(name, []), |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
277 nodemap=lambda repo, node: |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
278 repo._remotenames.nodetobmarks().get(node, [])) |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
279 repo.names.addnamespace(remotebookmarkns) |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
280 |
37089
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
281 # hoisting only works if there are remote bookmarks |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
282 hoist = ui.config('remotenames', 'hoistedpeer') |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
283 if hoist: |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
284 hoistednamens = ns( |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
285 'hoistednames', |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
286 templatename='hoistednames', |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
287 colorname='hoistedname', |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
288 logfmt='hoisted name: %s\n', |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
289 listnames = lambda repo: |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
290 repo._remotenames.hoisttonodes(hoist).keys(), |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
291 namemap = lambda repo, name: |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
292 repo._remotenames.hoisttonodes(hoist).get(name, []), |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
293 nodemap = lambda repo, node: |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
294 repo._remotenames.nodetohoists(hoist).get(node, [])) |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
295 repo.names.addnamespace(hoistednamens) |
9938992c5bae
remotenames: add functionality to hoist remotebookmarks
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37068
diff
changeset
|
296 |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
297 if ui.configbool('remotenames', 'branches'): |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
298 remotebranchns = ns( |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
299 'remotebranches', |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
300 templatename='remotebranches', |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
301 colorname='remotebranch', |
36264
18e29c65bc5c
remotenames: don't use the default value of logfmt for namespaces
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36252
diff
changeset
|
302 logfmt='remote branch: %s\n', |
36062
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
303 listnames = lambda repo: repo._remotenames.branchtonodes().keys(), |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
304 namemap = lambda repo, name: |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
305 repo._remotenames.branchtonodes().get(name, []), |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
306 nodemap = lambda repo, node: |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
307 repo._remotenames.nodetobranch().get(node, [])) |
382aefea8faf
remotenames: add new namespaces for remotebookmarks and remotebranches
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36061
diff
changeset
|
308 repo.names.addnamespace(remotebranchns) |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
309 |
37068
aa97e06a1912
templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents:
36956
diff
changeset
|
310 @templatekeyword('remotenames', requires={'repo', 'ctx'}) |
36591
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
311 def remotenameskw(context, mapping): |
36440
bb852a525633
remotenames: drop redundant templatekw names from help text
Yuya Nishihara <yuya@tcha.org>
parents:
36264
diff
changeset
|
312 """List of strings. Remote names associated with the changeset.""" |
36591
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
313 repo = context.resource(mapping, 'repo') |
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
314 ctx = context.resource(mapping, 'ctx') |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
315 |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
316 remotenames = [] |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
317 if 'remotebookmarks' in repo.names: |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
318 remotenames = repo.names['remotebookmarks'].names(repo, ctx.node()) |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
319 |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
320 if 'remotebranches' in repo.names: |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
321 remotenames += repo.names['remotebranches'].names(repo, ctx.node()) |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
322 |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
323 return templateutil.compatlist(context, mapping, 'remotename', remotenames, |
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
324 plural='remotenames') |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
325 |
37068
aa97e06a1912
templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents:
36956
diff
changeset
|
326 @templatekeyword('remotebookmarks', requires={'repo', 'ctx'}) |
36591
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
327 def remotebookmarkskw(context, mapping): |
36440
bb852a525633
remotenames: drop redundant templatekw names from help text
Yuya Nishihara <yuya@tcha.org>
parents:
36264
diff
changeset
|
328 """List of strings. Remote bookmarks associated with the changeset.""" |
36591
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
329 repo = context.resource(mapping, 'repo') |
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
330 ctx = context.resource(mapping, 'ctx') |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
331 |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
332 remotebmarks = [] |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
333 if 'remotebookmarks' in repo.names: |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
334 remotebmarks = repo.names['remotebookmarks'].names(repo, ctx.node()) |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
335 |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
336 return templateutil.compatlist(context, mapping, 'remotebookmark', |
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
337 remotebmarks, plural='remotebookmarks') |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
338 |
37068
aa97e06a1912
templater: use template context to render old-style list template
Yuya Nishihara <yuya@tcha.org>
parents:
36956
diff
changeset
|
339 @templatekeyword('remotebranches', requires={'repo', 'ctx'}) |
36591
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
340 def remotebrancheskw(context, mapping): |
36440
bb852a525633
remotenames: drop redundant templatekw names from help text
Yuya Nishihara <yuya@tcha.org>
parents:
36264
diff
changeset
|
341 """List of strings. Remote branches associated with the changeset.""" |
36591
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
342 repo = context.resource(mapping, 'repo') |
121a20e5da56
templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org>
parents:
36463
diff
changeset
|
343 ctx = context.resource(mapping, 'ctx') |
36063
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
344 |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
345 remotebranches = [] |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
346 if 'remotebranches' in repo.names: |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
347 remotebranches = repo.names['remotebranches'].names(repo, ctx.node()) |
5a53af7d09aa
remotenames: introduce new template keywords for remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36062
diff
changeset
|
348 |
36921
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
349 return templateutil.compatlist(context, mapping, 'remotebranch', |
32f9b7e3f056
templater: move hybrid class and functions to templateutil module
Yuya Nishihara <yuya@tcha.org>
parents:
36591
diff
changeset
|
350 remotebranches, plural='remotebranches') |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
351 |
40065
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
352 def _revsetutil(repo, subset, x, rtypes): |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
353 """utility function to return a set of revs based on the rtypes""" |
40065
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
354 args = revsetlang.getargs(x, 0, 1, _('only one argument accepted')) |
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
355 if args: |
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
356 kind, pattern, matcher = stringutil.stringmatcher( |
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
357 revsetlang.getstring(args[0], _('argument must be a string'))) |
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
358 else: |
40069
fd4d59cf2ebb
remotenames: abort if literal revset pattern matches nothing
Yuya Nishihara <yuya@tcha.org>
parents:
40068
diff
changeset
|
359 kind = pattern = None |
40066
fe64178103b7
remotenames: use util.always instead of handcrafted lambda
Yuya Nishihara <yuya@tcha.org>
parents:
40065
diff
changeset
|
360 matcher = util.always |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
361 |
40067
fba7428a0ef9
remotenames: don't call a set of nodes as "revs"
Yuya Nishihara <yuya@tcha.org>
parents:
40066
diff
changeset
|
362 nodes = set() |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
363 cl = repo.changelog |
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
364 for rtype in rtypes: |
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
365 if rtype in repo.names: |
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
366 ns = repo.names[rtype] |
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
367 for name in ns.listnames(repo): |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
368 if not matcher(name): |
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
369 continue |
40067
fba7428a0ef9
remotenames: don't call a set of nodes as "revs"
Yuya Nishihara <yuya@tcha.org>
parents:
40066
diff
changeset
|
370 nodes.update(ns.nodes(repo, name)) |
40069
fd4d59cf2ebb
remotenames: abort if literal revset pattern matches nothing
Yuya Nishihara <yuya@tcha.org>
parents:
40068
diff
changeset
|
371 if kind == 'literal' and not nodes: |
fd4d59cf2ebb
remotenames: abort if literal revset pattern matches nothing
Yuya Nishihara <yuya@tcha.org>
parents:
40068
diff
changeset
|
372 raise error.RepoLookupError(_("remote name '%s' does not exist") |
fd4d59cf2ebb
remotenames: abort if literal revset pattern matches nothing
Yuya Nishihara <yuya@tcha.org>
parents:
40068
diff
changeset
|
373 % pattern) |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
374 |
40067
fba7428a0ef9
remotenames: don't call a set of nodes as "revs"
Yuya Nishihara <yuya@tcha.org>
parents:
40066
diff
changeset
|
375 revs = (cl.rev(n) for n in nodes if cl.hasnode(n)) |
40068
b313f2c3b8c6
remotenames: remove unneeded sorted() from revset implementation
Yuya Nishihara <yuya@tcha.org>
parents:
40067
diff
changeset
|
376 return subset & smartset.baseset(revs) |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
377 |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
378 @revsetpredicate('remotenames([name])') |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
379 def remotenamesrevset(repo, subset, x): |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
380 """All changesets which have a remotename on them. If `name` is |
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
381 specified, only remotenames of matching remote paths are considered. |
40059
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
382 |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
383 Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
384 """ |
40065
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
385 return _revsetutil(repo, subset, x, ('remotebookmarks', 'remotebranches')) |
40059
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
386 |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
387 @revsetpredicate('remotebranches([name])') |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
388 def remotebranchesrevset(repo, subset, x): |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
389 """All changesets which are branch heads on remotes. If `name` is |
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
390 specified, only remotenames of matching remote paths are considered. |
40059
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
391 |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
392 Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
393 """ |
40065
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
394 return _revsetutil(repo, subset, x, ('remotebranches',)) |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
395 |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
396 @revsetpredicate('remotebookmarks([name])') |
36149
828f44cdfee3
remotenames: add three new revsets related to remotenames
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36063
diff
changeset
|
397 def remotebmarksrevset(repo, subset, x): |
40060
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
398 """All changesets which have bookmarks on remotes. If `name` is |
6346e21eecc8
remotenames: follow-up on D3639 to make revset funcs take only one arg
Augie Fackler <raf@durin42.com>
parents:
40059
diff
changeset
|
399 specified, only remotenames of matching remote paths are considered. |
40059
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
400 |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
401 Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. |
fda1df3d4e06
remotenames: add names argument to remotenames revset
Pulkit Goyal <7895pulkit@gmail.com>
parents:
39746
diff
changeset
|
402 """ |
40065
25533575d04e
remotenames: inline _parseargs() into _revsetutil()
Yuya Nishihara <yuya@tcha.org>
parents:
40060
diff
changeset
|
403 return _revsetutil(repo, subset, x, ('remotebookmarks',)) |