remotenames.py
77 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
/ hgext / remotenames.py
Pulkit Goyal
|
r36077 | # remotenames.py - extension to display remotenames | ||
# | ||||
# Copyright 2017 Augie Fackler <raf@durin42.com> | ||||
# Copyright 2017 Sean Farley <sean@farley.io> | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
""" showing remotebookmarks and remotebranches in UI """ | ||||
from __future__ import absolute_import | ||||
from mercurial import ( | ||||
logexchange, | ||||
) | ||||
# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for | ||||
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should | ||||
# be specifying the version(s) of Mercurial they are tested with, or | ||||
# leave the attribute unspecified. | ||||
testedwith = 'ships-with-hg-core' | ||||
class remotenames(dict): | ||||
""" | ||||
This class encapsulates all the remotenames state. It also contains | ||||
methods to access that state in convenient ways. | ||||
""" | ||||
def __init__(self, repo, *args): | ||||
dict.__init__(self, *args) | ||||
self._repo = repo | ||||
self['bookmarks'] = {} | ||||
self['branches'] = {} | ||||
self.loadnames() | ||||
self._loadednames = True | ||||
def loadnames(self): | ||||
""" loads the remotenames information from the remotenames file """ | ||||
for rtype in ('bookmarks', 'branches'): | ||||
for node, rpath, name in logexchange.readremotenamefile(self._repo, | ||||
rtype): | ||||
rname = rpath + '/' + name | ||||
self[rtype][rname] = [node] | ||||
def clearnames(self): | ||||
""" Clear all remote names state """ | ||||
self['bookmarks'] = {} | ||||
self['branches'] = {} | ||||
self._invalidatecache() | ||||
self._loadednames = False | ||||
def _invalidatecache(self): | ||||
self._nodetobmarks = None | ||||
self._nodetobranch = None | ||||
def bmarktonodes(self): | ||||
return self['bookmarks'] | ||||
def nodetobmarks(self): | ||||
if not self._nodetobmarks: | ||||
bmarktonodes = self.bmarktonodes() | ||||
self._nodetobmarks = {} | ||||
for name, node in bmarktonodes.iteritems(): | ||||
self._nodetobmarks.setdefault(node[0], []).append(name) | ||||
return self._nodetobmarks | ||||
def branchtonodes(self): | ||||
return self['branches'] | ||||
def nodetobranch(self): | ||||
if not self._nodetobranch: | ||||
branchtonodes = self.branchtonodes() | ||||
self._nodetobranch = {} | ||||
for name, nodes in branchtonodes.iteritems(): | ||||
for node in nodes: | ||||
self._nodetobranch.setdefault(node, []).append(name) | ||||
return self._nodetobranch | ||||