Mercurial > hg > hg-git
changeset 312:b1d6c7fe2f81
Merge branch 'rc/push-tag' into rc/master
author | Tay Ray Chuan <rctay89@gmail.com> |
---|---|
date | Sun, 04 Apr 2010 23:26:46 +0800 |
parents | dda51b4e5238 (current diff) 53b0d608dcd5 (diff) |
children | 3aa43b60697c |
files | hggit/git_handler.py |
diffstat | 3 files changed, 39 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/hggit/git_handler.py +++ b/hggit/git_handler.py @@ -568,6 +568,30 @@ raise hgutil.Abort("revision %s cannot be pushed since" " it doesn't have a ref" % ctx) + # Check if the tags the server is advertising are annotated tags, + # by attempting to retrieve it from the our git repo, and building a + # list of these tags. + # + # This is possible, even though (currently) annotated tags are + # dereferenced and stored as lightweight ones, as the annotated tag + # is still stored in the git repo. + uptodate_annotated_tags = [] + for r in tags: + ref = 'refs/tags/'+r + # Check tag. + if not ref in refs: + continue + try: + # We're not using Repo.tag(), as it's deprecated. + tag = self.git.get_object(refs[ref]) + if not isinstance(tag, Tag): + continue + except KeyError: + continue + + # If we've reached here, the tag's good. + uptodate_annotated_tags.append(ref) + for r in heads + tags: if r in heads: ref = 'refs/heads/'+r @@ -583,6 +607,9 @@ else: raise hgutil.Abort("pushing %s overwrites %s" % (ref, ctx)) + elif ref in uptodate_annotated_tags: + # we already have the annotated tag. + pass else: raise hgutil.Abort("%s changed on the server, please pull " "and merge before pushing" % ref)
--- a/tests/test-git-tags +++ b/tests/test-git-tags @@ -40,6 +40,7 @@ mkdir gitrepo cd gitrepo git init | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')" +git config receive.denyCurrentBranch ignore echo alpha > alpha git add alpha commit -m 'add alpha' @@ -56,12 +57,16 @@ --listen=localhost\ --export-all\ --pid-file=gitdaemon.pid \ - --detach --reuseaddr + --detach --reuseaddr \ + --enable=receive-pack hg clone git://localhost/gitrepo hgrepo | grep -v '^updating' cd hgrepo hg log --graph +echo beta-fix >> beta +hg commit -m 'fix for beta' +hg push cd .. kill `cat gitdaemon.pid`
--- a/tests/test-git-tags.out +++ b/tests/test-git-tags.out @@ -21,3 +21,9 @@ date: Mon Jan 01 00:00:10 2007 +0000 summary: add alpha +pushing to git://localhost/gitrepo +importing Hg objects into Git +creating and sending data + default::refs/tags/beta => GIT:e6f255c6 + default::refs/tags/alpha => GIT:7eeab2ea + default::refs/heads/master => GIT:3b7fd1b3