[dak/master] Modify binary package name check to accept -dbgsym
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 | 39 +++++++++++++++++++++++++++++++++++----
1 file changed, 35 insertions(+), 4 deletions(-)
diff --git a/daklib/checks.py b/daklib/checks.py
index 70e1f5e..48251ad 100644
--- a/daklib/checks.py
+++ b/daklib/checks.py
@@ -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
--
2.1.4
Reply to: