From: Paul Tagliamonte Date: Fri, 14 Aug 2015 19:33:47 +0000 (+0200) Subject: Modify binary package name check to accept -dbgsym X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=19c39d4596916347cafcaa6c95fff667b0a2337a;p=dak.git 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". --- diff --git a/daklib/checks.py b/daklib/checks.py index 70e1f5e3..48251adb 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