deb: make find_version() return sha1 of a commit
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Thu, 19 Jan 2012 15:03:38 +0000 (17:03 +0200)
committerGuido Günther <agx@sigxcpu.org>
Sat, 21 Jan 2012 16:45:55 +0000 (17:45 +0100)
Change find_version() so that it always returns sha1 of a commit object.
That is, annotated tags are dereferenced to a commit object. Previously
find_commit returned the sha1 of the tag object.

gbp/deb/git.py

index c6dc10f..8e2561a 100644 (file)
@@ -24,7 +24,9 @@ class DebianGitRepository(GitRepository):
 
     def find_version(self, format, version):
         """
-        Check if a certain version is stored in this repo and return it's SHA1.
+        Check if a certain version is stored in this repo and return the SHA1
+        of the related commit. That is, an annotated tag is dereferenced to the
+        commit object it points to.
 
         For legacy tags don't only check the tag itself but also the commit
         message, since the former wasn't injective until release 0.5.5. You
@@ -33,19 +35,21 @@ class DebianGitRepository(GitRepository):
 
         @param format: tag pattern
         @param version: debian version number
-        @return: sha1 of the version tag
+        @return: sha1 of the commit the tag references to
         """
         tag = self.version_to_tag(format, version)
         legacy_tag = self._build_legacy_tag(format, version)
         if self.has_tag(tag): # new tags are injective
-            return self.rev_parse(tag)
+            # dereference to a commit object
+            return self.rev_parse("%s^0" % tag)
         elif self.has_tag(legacy_tag):
             out, ret = self.__git_getoutput('cat-file', args=['-p', legacy_tag])
             if ret:
                 return None
             for line in out:
                 if line.endswith(" %s\n" % version):
-                    return self.rev_parse(legacy_tag)
+                    # dereference to a commit object
+                    return self.rev_parse("%s^0" % legacy_tag)
                 elif line.startswith('---'): # GPG signature start
                     return None
         return None