Show More
@@ -0,0 +1,77 b'' | |||
|
1 | # remotenames.py - extension to display remotenames | |
|
2 | # | |
|
3 | # Copyright 2017 Augie Fackler <raf@durin42.com> | |
|
4 | # Copyright 2017 Sean Farley <sean@farley.io> | |
|
5 | # | |
|
6 | # This software may be used and distributed according to the terms of the | |
|
7 | # GNU General Public License version 2 or any later version. | |
|
8 | ||
|
9 | """ showing remotebookmarks and remotebranches in UI """ | |
|
10 | ||
|
11 | from __future__ import absolute_import | |
|
12 | ||
|
13 | from mercurial import ( | |
|
14 | logexchange, | |
|
15 | ) | |
|
16 | ||
|
17 | # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | |
|
18 | # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | |
|
19 | # be specifying the version(s) of Mercurial they are tested with, or | |
|
20 | # leave the attribute unspecified. | |
|
21 | testedwith = 'ships-with-hg-core' | |
|
22 | ||
|
23 | class remotenames(dict): | |
|
24 | """ | |
|
25 | This class encapsulates all the remotenames state. It also contains | |
|
26 | methods to access that state in convenient ways. | |
|
27 | """ | |
|
28 | ||
|
29 | def __init__(self, repo, *args): | |
|
30 | dict.__init__(self, *args) | |
|
31 | self._repo = repo | |
|
32 | self['bookmarks'] = {} | |
|
33 | self['branches'] = {} | |
|
34 | self.loadnames() | |
|
35 | self._loadednames = True | |
|
36 | ||
|
37 | def loadnames(self): | |
|
38 | """ loads the remotenames information from the remotenames file """ | |
|
39 | for rtype in ('bookmarks', 'branches'): | |
|
40 | for node, rpath, name in logexchange.readremotenamefile(self._repo, | |
|
41 | rtype): | |
|
42 | rname = rpath + '/' + name | |
|
43 | self[rtype][rname] = [node] | |
|
44 | ||
|
45 | def clearnames(self): | |
|
46 | """ Clear all remote names state """ | |
|
47 | self['bookmarks'] = {} | |
|
48 | self['branches'] = {} | |
|
49 | self._invalidatecache() | |
|
50 | self._loadednames = False | |
|
51 | ||
|
52 | def _invalidatecache(self): | |
|
53 | self._nodetobmarks = None | |
|
54 | self._nodetobranch = None | |
|
55 | ||
|
56 | def bmarktonodes(self): | |
|
57 | return self['bookmarks'] | |
|
58 | ||
|
59 | def nodetobmarks(self): | |
|
60 | if not self._nodetobmarks: | |
|
61 | bmarktonodes = self.bmarktonodes() | |
|
62 | self._nodetobmarks = {} | |
|
63 | for name, node in bmarktonodes.iteritems(): | |
|
64 | self._nodetobmarks.setdefault(node[0], []).append(name) | |
|
65 | return self._nodetobmarks | |
|
66 | ||
|
67 | def branchtonodes(self): | |
|
68 | return self['branches'] | |
|
69 | ||
|
70 | def nodetobranch(self): | |
|
71 | if not self._nodetobranch: | |
|
72 | branchtonodes = self.branchtonodes() | |
|
73 | self._nodetobranch = {} | |
|
74 | for name, nodes in branchtonodes.iteritems(): | |
|
75 | for node in nodes: | |
|
76 | self._nodetobranch.setdefault(node, []).append(name) | |
|
77 | return self._nodetobranch |
@@ -274,6 +274,7 b' Test extension help:' | |||
|
274 | 274 | purge command to delete untracked files from the working |
|
275 | 275 | directory |
|
276 | 276 | relink recreates hardlinks between repository clones |
|
277 | remotenames showing remotebookmarks and remotebranches in UI | |
|
277 | 278 | schemes extend schemes with shortcuts to repository swarms |
|
278 | 279 | share share a common history between several working directories |
|
279 | 280 | shelve save and restore changes to the working directory |
General Comments 0
You need to be logged in to leave comments.
Login now