]> git.decadent.org.uk Git - dak.git/commitdiff
Modify binary package name check to accept -dbgsym
authorPaul Tagliamonte <tag@pault.ag>
Fri, 14 Aug 2015 19:33:47 +0000 (21:33 +0200)
committerPaul Tagliamonte <tag@pault.ag>
Fri, 14 Aug 2015 19:53:10 +0000 (21:53 +0200)
 In particular, we should tolerate .deb packages that are in the
 Files, but are not present in the Binary package listing, since
 adding them into debian/control is a pretty bad idea.

 debhelper (currently, this will be default later), when givin
 `DH_BUILD_DDEBS=1` will build DH_BUILD_DDEBS that are in the Files
 list, named foo-dbgsym.

 The check now validates that the -dbgsym package corresponds to
 a package that *is* listed in the Binary package listing, and in
 the section "debug".

daklib/checks.py

index 70e1f5e398dd3b17e4e5d1f9127f15e4dfb84abb..48251adb3eab3a5075f96c8d5f652933f8ae38e2 100644 (file)
@@ -286,13 +286,44 @@ class ExternalHashesCheck(Check):
 class BinaryCheck(Check):
     """Check binary packages for syntax errors."""
     def check(self, upload):
+        debug_deb_name_postfix = "-dbgsym"
+        debug_deb_section = "debug"
+        # XXX: Handle dynamic debug section name here
+
         for binary in upload.changes.binaries:
             self.check_binary(upload, binary)
 
-        binary_names = set([ binary.control['Package'] for binary in upload.changes.binaries ])
-        for bn in binary_names:
-            if bn not in upload.changes.binary_names:
-                raise Reject('Package {0} is not mentioned in Binary field in changes'.format(bn))
+        binaries = {binary.control['Package']: binary
+                        for binary in upload.changes.binaries}
+
+        for name, binary in binaries.items():
+            if binary.control['Section'] == debug_deb_section:
+                # If we have a Binary package in the Debug section, we
+                # can allow it to not be present in the Binary field
+                # in the .changes file, so long as its name (without
+                # -dbgsym) is present in the Binary list.
+                if not name.endswith(debug_deb_name_postfix):
+                    raise Reject('Package {0} is in the Debug section, but '
+                                 'does not end in -dbgsym.'.format(name))
+
+                # Right, so, it's named properly, let's check that
+                # the corresponding package is in the Binary list
+                origin_package_name = name[:-len(debug_deb_name_postfix)]
+                if origin_package_name not in upload.changes.binary_names:
+                    raise Reject(
+                        "Debug package {debug}'s corresponding binary package "
+                        "{origin} is not present in the Binary field.".format(
+                            debug=name, origin=origin_package_name))
+
+                # So, now we're sure the package is named correctly, and
+                # we have the other package. Lets let this slide through.
+                continue
+
+            if name not in upload.changes.binary_names:
+                # Someone was a nasty little hacker and put a package
+                # into the .changes that isn't in debian/control. Bad,
+                # Bad hacker.
+                raise Reject('Package {0} is not mentioned in Binary field in changes'.format(name))
 
         return True