convert: support non annotated tags in git backend
authorEdouard Gomez <ed.gomez@free.fr>
Wed, 14 Mar 2012 01:13:45 +0100
changeset 16259 589aab2ca716
parent 16256 c655e4acaa82
child 16260 33fcad3cfbbc
convert: support non annotated tags in git backend Do not blindly filter out non ending ^{} tags. The new logic is: - if both "tag" and "tag^{}" exist, "tag^{}" is what we want - if only "tag" exists, "tag" is fine
hgext/convert/git.py
--- a/hgext/convert/git.py	Tue Mar 13 16:29:13 2012 -0500
+++ b/hgext/convert/git.py	Wed Mar 14 01:13:45 2012 +0100
@@ -143,20 +143,30 @@
 
     def gettags(self):
         tags = {}
+        alltags = {}
         fh = self.gitopen('git ls-remote --tags "%s"' % self.path)
         prefix = 'refs/tags/'
+
+        # Build complete list of tags, both annotated and bare ones
         for line in fh:
             line = line.strip()
-            if not line.endswith("^{}"):
-                continue
             node, tag = line.split(None, 1)
             if not tag.startswith(prefix):
                 continue
-            tag = tag[len(prefix):-3]
-            tags[tag] = node
+            alltags[tag[len(prefix):]] = node
         if fh.close():
             raise util.Abort(_('cannot read tags from %s') % self.path)
 
+        # Filter out tag objects for annotated tag refs
+        for tag in alltags:
+            if tag.endswith('^{}'):
+                tags[tag[:-3]] = alltags[tag]
+            else:
+                if tag + '^{}' in alltags:
+                    continue
+                else:
+                    tags[tag] = alltags[tag]
+
         return tags
 
     def getchangedfiles(self, version, i):