Mercurial > hg
annotate hgext/remotenames.py @ 42079:fcd7a91dec23
localrepo: don't allow lookup of working directory revision
It seems that repo.lookup(), which is what supports the "lookup" wire
protocol command, should not allow the working copy revision
input.
This fixes both the pull test and the convert test I just added.
Differential Revision: https://phab.mercurial-scm.org/D6215
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 05 Apr 2019 11:24:00 -0700 |
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',)) |