diff --git a/hggit/gitrepo.py b/hggit/gitrepo.py index 999d6cd96e2f8ad41dbabdf25953094f8aeb21e1_aGdnaXQvZ2l0cmVwby5weQ==..9c7845735a866503daed592a8ce30cad5f585743_aGdnaXQvZ2l0cmVwby5weQ== 100644 --- a/hggit/gitrepo.py +++ b/hggit/gitrepo.py @@ -15,6 +15,19 @@ except ImportError: from mercurial.peer import peerrepository +namespaceapi = False +try: + from mercurial import templatekw + from mercurial.namespaces import ( + namespace, + namespaces + ) + namespaceapi = True + gitcolumn='gitbookmark' + gitcolumn='bookmark' +except ImportError: + pass + class basegitrepo(peerrepository): def __init__(self, ui, path, create, intents=None, **kwargs): @@ -23,6 +36,16 @@ self._ui = ui self.path = path self.localrepo = None + if namespaceapi: + self.namemap = None + columns = templatekw.getlogcolumns() + n = namespace("gitbookmarks", templatename="gitbookmark", + logfmt=columns[gitcolumn], + listnames=self.lazynames, + namemap=self.lazynamemap, nodemap=self.lazynodemap, + builtin=True) + self.names = namespaces() + self.names.addnamespace(n) _peercapabilities = ['lookup'] @@ -50,6 +73,40 @@ def heads(self): return [] + def populaterefs(self): + if self.localrepo is None: + return False + if self.strippedrefs is not None: + return True + handler = self.localrepo.githandler + result = handler.fetch_pack(self.path, heads=[]) + # map any git shas that exist in hg to hg shas + self.strippedrefs = { + ref[11:]: handler.map_hg_get(val) or val + for ref, val in result.refs.iteritems() + if ref.startswith('refs/heads/') + } + return True + + def lazynames(self): + if not self.populaterefs(): + return None + return self.namemap.keys() + + def lazynamemap(self, name): + if not self.populaterefs(): + return None + if not name in self.namemap: + return None + return self.namemap[name] + + def lazynodemap(self, node): + if not self.populaterefs(): + return None + if not node in self.namemap: + return None + return self.namemap[node] + def listkeys(self, namespace): if namespace == 'namespaces': return {'bookmarks': ''}