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 | purge command to delete untracked files from the working |
|
274 | purge command to delete untracked files from the working | |
275 | directory |
|
275 | directory | |
276 | relink recreates hardlinks between repository clones |
|
276 | relink recreates hardlinks between repository clones | |
|
277 | remotenames showing remotebookmarks and remotebranches in UI | |||
277 | schemes extend schemes with shortcuts to repository swarms |
|
278 | schemes extend schemes with shortcuts to repository swarms | |
278 | share share a common history between several working directories |
|
279 | share share a common history between several working directories | |
279 | shelve save and restore changes to the working directory |
|
280 | shelve save and restore changes to the working directory |
General Comments 0
You need to be logged in to leave comments.
Login now