remote-bzr: improve tag handling

revision_history() is deprecated and doesn't do what we want (revno instead of dotted_revno?). Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Felipe Contreras committed Apr 8, 2013 at 13:36 UTC fa7285dc3dce8bd01fd8c665b032603ed55348e5
1 file changed +16 -9
contrib/remote-helpers/git-remote-bzr
+16 -9
@@ -25,6 +25,7 @@ bzrlib.plugin.load_plugins()
25
26 import bzrlib.generate_ids
27 import bzrlib.transport
28 +import bzrlib.errors
29
30 import sys
31 import os
@@ -335,12 +336,9 @@ def export_branch(branch, name):
336
337 def export_tag(repo, name):
338 global tags
338 - try:
339 - print "reset refs/tags/%s" % name
340 - print "from :%u" % rev_to_mark(tags[name])
341 - print
342 - except KeyError:
343 - warn("TODO: fetch tag '%s'" % name)
339 + print "reset refs/tags/%s" % name
340 + print "from :%u" % rev_to_mark(tags[name])
341 + print
342
343 def do_import(parser):
344 global dirname
@@ -660,16 +658,25 @@ def do_capabilities(parser):
658
659 print
660
661 +def ref_is_valid(name):
662 + return not True in [c in name for c in '~^: \\']
663 +
664 def do_list(parser):
665 global tags
666 print "? refs/heads/%s" % 'master'
667
667 - history = parser.repo.revision_history()
668 - for tag, revid in parser.repo.tags.get_tag_dict().items():
669 - if revid not in history:
668 + branch = parser.repo
669 + branch.lock_read()
670 + for tag, revid in branch.tags.get_tag_dict().items():
671 + try:
672 + branch.revision_id_to_dotted_revno(revid)
673 + except bzrlib.errors.NoSuchRevision:
674 + continue
675 + if not ref_is_valid(tag):
676 continue
677 print "? refs/tags/%s" % tag
678 tags[tag] = revid
679 + branch.unlock()
680 print "@refs/heads/%s HEAD" % 'master'
681 print
682