hgext/convert/git.py
changeset 16259 589aab2ca716
parent 14945 11aad09a6370
child 16295 ba42eb722bb3
equal deleted inserted replaced
16256:c655e4acaa82 16259:589aab2ca716
   141                    rev=version)
   141                    rev=version)
   142         return c
   142         return c
   143 
   143 
   144     def gettags(self):
   144     def gettags(self):
   145         tags = {}
   145         tags = {}
       
   146         alltags = {}
   146         fh = self.gitopen('git ls-remote --tags "%s"' % self.path)
   147         fh = self.gitopen('git ls-remote --tags "%s"' % self.path)
   147         prefix = 'refs/tags/'
   148         prefix = 'refs/tags/'
       
   149 
       
   150         # Build complete list of tags, both annotated and bare ones
   148         for line in fh:
   151         for line in fh:
   149             line = line.strip()
   152             line = line.strip()
   150             if not line.endswith("^{}"):
       
   151                 continue
       
   152             node, tag = line.split(None, 1)
   153             node, tag = line.split(None, 1)
   153             if not tag.startswith(prefix):
   154             if not tag.startswith(prefix):
   154                 continue
   155                 continue
   155             tag = tag[len(prefix):-3]
   156             alltags[tag[len(prefix):]] = node
   156             tags[tag] = node
       
   157         if fh.close():
   157         if fh.close():
   158             raise util.Abort(_('cannot read tags from %s') % self.path)
   158             raise util.Abort(_('cannot read tags from %s') % self.path)
       
   159 
       
   160         # Filter out tag objects for annotated tag refs
       
   161         for tag in alltags:
       
   162             if tag.endswith('^{}'):
       
   163                 tags[tag[:-3]] = alltags[tag]
       
   164             else:
       
   165                 if tag + '^{}' in alltags:
       
   166                     continue
       
   167                 else:
       
   168                     tags[tag] = alltags[tag]
   159 
   169 
   160         return tags
   170         return tags
   161 
   171 
   162     def getchangedfiles(self, version, i):
   172     def getchangedfiles(self, version, i):
   163         changes = []
   173         changes = []