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