##// END OF EJS Templates
remotenames: introduce class to encapsulate remotenames info in an extension...
remotenames: introduce class to encapsulate remotenames info in an extension This patch adds a new extension remotenames in which features from hgremotenames extension (https://bb/seanfarley/hgremotenames) will be added incrementally. This patch introduces a basic class to encapsulate the remotenames information. Differential Revision: https://phab.mercurial-scm.org/D1756

File last commit:

r36077:cabe8ef5 default
r36077:cabe8ef5 default
Show More
remotenames.py
77 lines | 2.5 KiB | text/x-python | PythonLexer
# 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