##// END OF EJS Templates
remotenames: introduce class to encapsulate remotenames info in an extension...
Pulkit Goyal -
r36077:cabe8ef5 default
parent child Browse files
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