Mercurial > hg > hg-git
changeset 557:4f4ab2d89375
gitrepo: initial support for listkeys
This changeset adds test coverage for comparing "hg outgoing -B" in normal
Mercurial usage with Hg-Git usage. This didn't match, since previously, gitrepo
didn't provide a meaningful listkeys implementation. Now, it does.
gitrepo now has access to a GitHandler when a localrepo is available. This
handler is used to access the information needed to implement listkeys for
namespaces (currently, only bookmarks) and bookmarks.
A couple of other tests were testing "divergent bookmark" scenarios. These
tests have been updated to filter out the divergent bookmark output, as it isn't
consistent across the supported Mercurial versions.
author | David M. Carr <david@carrclan.us> |
---|---|
date | Thu, 25 Oct 2012 20:49:08 -0400 |
parents | affd119533ae |
children | ab8061d9942b |
files | hggit/git_handler.py hggit/gitrepo.py hggit/overlay.py tests/test-bookmark-workflow.t tests/test-incoming.t tests/test-outgoing.t tests/test-pull-after-strip.t tests/test-push.t |
diffstat | 8 files changed, 52 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/hggit/git_handler.py +++ b/hggit/git_handler.py @@ -964,7 +964,7 @@ return new_refs - def fetch_pack(self, remote_name, heads): + def fetch_pack(self, remote_name, heads=None): client, path = self.get_transport_and_path(remote_name) graphwalker = self.git.get_graph_walker() def determine_wants(refs):
--- a/hggit/gitrepo.py +++ b/hggit/gitrepo.py @@ -1,3 +1,4 @@ +import os from mercurial import util try: from mercurial.error import RepoError @@ -11,6 +12,10 @@ from git_handler import GitHandler +from overlay import overlayrepo + +from mercurial.node import bin + class gitrepo(peerrepository): capabilities = ['lookup'] @@ -23,6 +28,12 @@ self.ui = ui self.path = path self.localrepo = None + self.handler = None + + def _initializehandler(self): + if self.handler is None and self.localrepo is not None: + self.handler = GitHandler(self.localrepo, self.localrepo.ui) + return self.handler def url(self): return self.path @@ -39,6 +50,22 @@ return [] def listkeys(self, namespace): + if namespace == 'namespaces': + return {'bookmarks':''} + elif namespace == 'bookmarks': + handler = self._initializehandler() + if handler: + handler.export_commits() + refs = handler.fetch_pack(self.path) + reqrefs = refs + convertlist, commits = handler.getnewgitcommits(reqrefs) + newcommits = [bin(c) for c in commits] + b = overlayrepo(handler, newcommits, refs) + stripped_refs = dict([ + (ref[ref.find('/', ref.find('/')+1)+1:], b.node(refs[ref])) + for ref in refs.keys() + if ref.find('/') != -1]) + return stripped_refs return {} def pushkey(self, namespace, key, old, new):
--- a/hggit/overlay.py +++ b/hggit/overlay.py @@ -227,6 +227,12 @@ return self.handler.repo[n] return overlaychangectx(self, n) + def node(self, n): + """Returns an Hg or Git hash for the specified Git hash""" + if bin(n) in self.revmap: + return n + return self.handler.map_hg_get(n) + def nodebookmarks(self, n): return self.refmap.get(n, [])
--- a/tests/test-bookmark-workflow.t +++ b/tests/test-bookmark-workflow.t @@ -109,6 +109,11 @@ searching for changes no changes found [1] + $ hg outgoing -B + comparing with $TESTTMP/hgremoterepo + searching for changed bookmarks + no changed bookmarks found + [1] $ hg push pushing to $TESTTMP/hgremoterepo searching for changes @@ -121,6 +126,11 @@ searching for changes no changes found [1] + $ hg outgoing -B + comparing with $TESTTMP/gitremoterepo + searching for changed bookmarks + no changed bookmarks found + [1] $ hg push pushing to $TESTTMP/gitremoterepo searching for changes
--- a/tests/test-incoming.t +++ b/tests/test-incoming.t @@ -152,7 +152,8 @@ $ echo % nothing incoming after pull % nothing incoming after pull - $ hg pull +"adding remote bookmark" message was added in Mercurial 2.3 + $ hg pull | grep -v "adding remote bookmark" pulling from $TESTTMP/gitrepo importing git objects into hg (run 'hg heads' to see heads, 'hg merge' to merge)
--- a/tests/test-outgoing.t +++ b/tests/test-outgoing.t @@ -126,7 +126,7 @@ [255] $ echo % let\'s pull and try again % let's pull and try again - $ hg pull + $ hg pull 2>&1 | grep -v 'divergent bookmark' pulling from */gitrepo (glob) importing git objects into hg (run 'hg update' to get a working copy)
--- a/tests/test-pull-after-strip.t +++ b/tests/test-pull-after-strip.t @@ -114,11 +114,12 @@ git commit map cleaned $ echo % pull works after \'hg git-cleanup\' % pull works after 'hg git-cleanup' - $ hg pull -r beta +"adding remote bookmark" message was added in Mercurial 2.3 + $ hg pull -r beta | grep -v "adding remote bookmark" pulling from $TESTTMP/gitrepo importing git objects into hg (run 'hg update' to get a working copy) - $ hg log --graph | egrep -v ': *(beta|master)' + $ hg log --graph | egrep -v 'bookmark: *(alpha|beta|master)' o changeset: 2:611948b1ec6a | tag: default/beta | tag: tip
--- a/tests/test-push.t +++ b/tests/test-push.t @@ -102,7 +102,7 @@ abort: refs/heads/master changed on the server, please pull and merge before pushing [255] - $ hg pull + $ hg pull 2>&1 | grep -v 'divergent bookmark' pulling from $TESTTMP/gitrepo importing git objects into hg (run 'hg update' to get a working copy) @@ -117,7 +117,7 @@ date: Mon Jan 01 00:00:12 2007 +0000 summary: add gamma - $ hg log -r default/master + $ hg log -r default/master | grep -v 'master@default' changeset: 3:1436150b86c2 tag: default/master tag: tip