git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 5/7] remote-bzr: improve tag handling

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Apr 8, 2013, 17:27 UTC
Message-ID
<1365442036-25732-6-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1365442036-25732-1-git-send-email-felipe.contreras@gmail.com>

If the tags don't have an associated revision, there's nothing we can do with them, skip them. Also, let's skip the ones git can't handle.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/remote-helpers/git-remote-bzr | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index 9466cb9..dc0b757 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -25,6 +25,7 @@ bzrlib.plugin.load_plugins()
 
 import bzrlib.generate_ids
 import bzrlib.transport
+import bzrlib.errors
 
 import sys
 import os
@@ -332,12 +333,9 @@ def export_branch(branch, name):
 
 def export_tag(repo, name):
     global tags
-    try:
-        print "reset refs/tags/%s" % name
-        print "from :%u" % rev_to_mark(tags[name])
-        print
-    except KeyError:
-        warn("TODO: fetch tag '%s'" % name)
+    print "reset refs/tags/%s" % name
+    print "from :%u" % rev_to_mark(tags[name])
+    print
 
 def do_import(parser):
     global dirname
@@ -651,12 +649,25 @@ def do_capabilities(parser):
 
     print
 
+def ref_is_valid(name):
+    return not True in [c in name for c in '~^: \\']
+
 def do_list(parser):
     global tags
     print "? refs/heads/%s" % 'master'
-    for tag, revid in parser.repo.tags.get_tag_dict().items():
+
+    branch = parser.repo
+    branch.lock_read()
+    for tag, revid in branch.tags.get_tag_dict().items():
+        try:
+            branch.revision_id_to_dotted_revno(revid)
+        except bzrlib.errors.NoSuchRevision:
+            continue
+        if not ref_is_valid(tag):
+            continue
         print "? refs/tags/%s" % tag
         tags[tag] = revid
+    branch.unlock()
     print "@refs/heads/%s HEAD" % 'master'
     print
 
-- 
1.8.2
Previous: Felipe ContrerasNext: Felipe Contreras
Message 6 of 12 in “remote-bzr: generic updates”
  1. 0/7 remote-bzr: generic updatesFelipe Contreras, Apr 8, 2013
  2. 1/7 remote-bzr: fix directory renamingFelipe Contreras, Apr 8, 2013
  3. 2/7 remote-bzr: remove files before modificationsFelipe Contreras, Apr 8, 2013
  4. 3/7 remote-bzr: set author if availableFelipe Contreras, Apr 8, 2013
  5. 4/7 remote-bzr: only update workingtree on local reposFelipe Contreras, Apr 8, 2013
  6. 5/7 remote-bzr: improve tag handlingFelipe Contreras, Apr 8, 2013
  7. 6/7 remote-bzr: add utf-8 support for fetchingFelipe Contreras, Apr 8, 2013
  8. Torsten BögershausenApr 8, 2013
  9. 7/7 remote-bzr: add utf-8 support for pushingFelipe Contreras, Apr 8, 2013
  10. Junio C HamanoApr 8, 2013
  11. Felipe ContrerasApr 8, 2013
  12. Junio C HamanoApr 8, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.