Mercurial > hg > hg-git
changeset 555:06a29fdd52a7
push: fix traceback when pushing empty hg repo to empty git repo (issue #58)
In the logic that was attempting to handle the case where the local repo doesn't
have any bookmarks, the assumption was being made that tip resolved to a
non-null revision. In the case of a totally empty local repo, however, that
isn't a valid assumption, and resulted in attempting to set the master ref
to None, which broke dulwich.
The "fix", which avoids the traceback and allows the push to complete (though
still do nothing, since in this case there aren't any changes to push), is to
not tweak the refs at all if tip is nullid. Leaving the special capabilities
ref and not adding a master ref appears to be fine in this case.
author | David M. Carr <david@carrclan.us> |
---|---|
date | Thu, 25 Oct 2012 00:40:35 -0400 |
parents | f3f344aac42b |
children | affd119533ae |
files | hggit/git_handler.py tests/test-push.t |
diffstat | 2 files changed, 22 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/hggit/git_handler.py +++ b/hggit/git_handler.py @@ -885,15 +885,17 @@ #The remote repo is empty and the local one doesn't have bookmarks/tags if refs.keys()[0] == 'capabilities^{}': - del new_refs['capabilities^{}'] if not self.local_heads(): - tip = hex(self.repo.lookup('tip')) - try: - commands.bookmark(self.ui, self.repo, 'master', tip, force=True) - except NameError: - bookmarks.bookmark(self.ui, self.repo, 'master', tip, force=True) - bookmarks.setcurrent(self.repo, 'master') - new_refs['refs/heads/master'] = self.map_git_get(tip) + tip = self.repo.lookup('tip') + if tip != nullid: + del new_refs['capabilities^{}'] + tip = hex(tip) + try: + commands.bookmark(self.ui, self.repo, 'master', tip, force=True) + except NameError: + bookmarks.bookmark(self.ui, self.repo, 'master', tip, force=True) + bookmarks.setcurrent(self.repo, 'master') + new_refs['refs/heads/master'] = self.map_git_get(tip) for rev in revs: ctx = self.repo[rev]
--- a/tests/test-push.t +++ b/tests/test-push.t @@ -153,3 +153,15 @@ [1] $ cd .. + +Push empty Hg repo to empty Git repo (issue #58) +Since there aren't any changes, exit code 1 is expected in modern Mercurial. +However, since it varies between supported Mercurial versions, we need to +force it to consistency for now. (see issue3228, fixed in Mercurial 2.1) + $ hg init hgrepo2 + $ git init -q --bare gitrepo2 + $ hg -R hgrepo2 push gitrepo2 && false + pushing to gitrepo2 + searching for changes + no changes found + [1]