Skip to content
Snippets Groups Projects
Commit 53b0d608 authored by Tay Ray Chuan's avatar Tay Ray Chuan
Browse files

when pushing, check if server is advertising annotated tags

Check if already we have these annotated tags; if so, don't push it.

Update test-git-tags too.
parent af8d8fbc
No related branches found
No related tags found
No related merge requests found
......@@ -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)
......
......@@ -24,4 +24,6 @@
pushing to git://localhost/gitrepo
importing Hg objects into Git
creating and sending data
abort: refs/tags/beta changed on the server, please pull and merge before pushing
default::refs/tags/beta => GIT:e6f255c6
default::refs/tags/alpha => GIT:7eeab2ea
default::refs/heads/master => GIT:3b7fd1b3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment