]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/checks.py
Add option to forbid source and/or binary uploads to a suite
[dak.git] / daklib / checks.py
index 48251adb3eab3a5075f96c8d5f652933f8ae38e2..e17a191e39472b112e50f24a00442da161c65970 100644 (file)
@@ -287,7 +287,6 @@ 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:
@@ -297,14 +296,17 @@ class BinaryCheck(Check):
                         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
+            if name in upload.changes.binary_names:
+                # Package is listed in Binary field. Everything is good.
+                pass
+            elif daklib.utils.is_in_debug_section(binary.control):
+                # 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))
+                    raise Reject('Package {0} is in the debug section, but '
+                                 'does not end in {1}.'.format(name, debug_deb_name_postfix))
 
                 # Right, so, it's named properly, let's check that
                 # the corresponding package is in the Binary list
@@ -314,15 +316,10 @@ class BinaryCheck(Check):
                         "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:
+            else:
                 # Someone was a nasty little hacker and put a package
                 # into the .changes that isn't in debian/control. Bad,
-                # Bad hacker.
+                # bad person.
                 raise Reject('Package {0} is not mentioned in Binary field in changes'.format(name))
 
         return True
@@ -721,6 +718,8 @@ class NoSourceOnlyCheck(Check):
         if not allow_no_arch_indep_uploads \
            and 'all' not in changes.architectures \
            and 'experimental' not in changes.distributions \
+           and 'unstable' not in changes.distributions \
+           and 'sid' not in changes.distributions \
            and changes.source.package_list.has_arch_indep_packages():
             raise Reject('Uploads not including architecture-independent packages are not allowed.')
 
@@ -800,6 +799,14 @@ class SourceFormatCheck(Check):
         if query.first() is None:
             raise Reject('source format {0} is not allowed in suite {1}'.format(source_format, suite.suite_name))
 
+class SuiteCheck(Check):
+    def per_suite_check(self, upload, suite):
+        if not suite.accept_source_uploads and upload.changes.source is not None:
+            raise Reject('The suite "{0}" does not accept source uploads.'.format(suite.suite_name))
+        if not suite.accept_binary_uploads and len(upload.changes.binaries) != 0:
+            raise Reject('The suite "{0}" does not accept binary uploads.'.format(suite.suite_name))
+        return True
+
 class SuiteArchitectureCheck(Check):
     def per_suite_check(self, upload, suite):
         session = upload.session