debian/lib/python: Again fix recognizing versions
authorHans van Kranenburg <hans@knorrie.org>
Sun, 8 Jul 2018 21:54:35 +0000 (23:54 +0200)
committerHans van Kranenburg <hans@knorrie.org>
Sun, 29 Jul 2018 01:51:53 +0000 (03:51 +0200)
In commit 55129e390c I changed this code to recognize a few patterns,
but it turns out the code was not fully functioning.

Also move determining the treeish to the same place with the version
regex.

See the numbered comments when determining the treeish for valid
patterns:

1. pre version in between stable releases with explicit commit
   e.g. 4.10.2~pre+1.25e0657ed4-1
   -> use commit 25e0657ed4
2. explicit commit while in rc
   e.g. 4.11.0~rc6+1.35fcb982ea-1~exp1
   -> use commit 35fcb982ea
3. release candidate
   e.g. 4.11.0~rc7-1~exp1
   -> use tag 4.11.0-rc7
4. regular release, like 4.10.2
   -> use tag RELEASE-4.10.2

Signed-off-by: Hans van Kranenburg <hans@knorrie.org>
debian/bin/genorig.py
debian/lib/python/debian_xen/debian.py

index 680042187753f06114aaf83e6ecb9f712964ed5f..1d3c5a158b3a71d0ba8d3eb49dbd8b63426eb5b0 100755 (executable)
@@ -35,17 +35,13 @@ class Main(object):
 
     def __call__(self):
         out = "../orig/%s" % self.orig_tar
-        self.log("Generate tarball %s\n" % out)
 
         if self.options.tag:
             treeish = self.options.tag
         else:
-            if self.changelog_entry.version.pre_commit:
-                treeish = self.changelog_entry.version.pre_commit
-            elif self.changelog_entry.version.rc_commit:
-                treeish = self.changelog_entry.version.rc_commit
-            else:
-                treeish = 'RELEASE-%s' % self.version.upstream
+            treeish = self.changelog_entry.version.treeish
+
+        self.log("Generate tarball %s from treeish %s\n" % (out, treeish))
 
         try:
             os.stat(out)
index 8dfef71b51f805278b75b7db541f6048350a9648..6c0f9dafb3cfb7c4986f06a6b2a90adbc91e06bc 100644 (file)
@@ -5,14 +5,14 @@ from debian_linux.debian import Version
 class VersionXen(Version):
     _version_xen_rules = r"""
         ^
-        (?P<version>\d+\.\d+)
+        (?P<major>\d+)\.(?P<minor>\d+)(?:\.(?P<patch>\d+))?
         (?:
-         \.\d+(?:~pre(?:\+\d+\.(?P<pre_commit>[0-9a-f]{10})))?
+         ~pre(?:\+\d+\.(?P<pre_commit>[0-9a-f]{10}))
          |
-         ~rc\d+(?:\+\d+\.(?P<rc_commit>[0-9a-f]{10}))?
-        )
+         ~rc(?P<rc>\d+)(?:\+\d+\.(?P<rc_commit>[0-9a-f]{10}))?
+        )?
         -
-        (?:[^-]+)
+        (?P<debian_revision>[^-]+)
         $
         """
     _version_xen_re = re.compile(_version_xen_rules, re.X)
@@ -23,6 +23,29 @@ class VersionXen(Version):
         if match is None:
             raise ValueError("Invalid debian xen version")
         d = match.groupdict()
-        self.xen_version = d['version']
+        self.major = d['major']
+        self.minor = d['minor']
+        self.patch = d['patch']
         self.pre_commit = d['pre_commit']
         self.rc_commit = d['rc_commit']
+        self.rc = d['rc']
+        self.debian_revision = d['debian_revision']
+
+        # Now find out which treeish in the upstream source we need to build
+        # the orig tar from.
+
+        # 1. pre version in between stable releases with explicit commit
+        # e.g. 4.10.2~pre+1.25e0657ed4-1
+        if self.pre_commit is not None:
+            self.treeish = self.pre_commit
+        # 2. explicit commit while in rc
+        # e.g. 4.11.0~rc6+1.35fcb982ea-1~exp1
+        elif self.rc_commit is not None:
+            self.treeish = self.rc_commit
+        # 3. release candidate
+        # e.g. 4.11.0~rc7-1~exp1
+        elif self.rc is not None:
+            self.treeish = '%s.%s.%s-rc%s' % (self.major, self.minor, self.patch, self.rc)
+        # 4. regular release, like 4.10.2 -> tag RELEASE-4.10.2
+        else:
+            self.treeish = 'RELEASE-%s.%s.%s' % (self.major, self.minor, self.patch)