]> git.decadent.org.uk Git - dak.git/blobdiff - dak/process_unchecked.py
Merge mainline
[dak.git] / dak / process_unchecked.py
index c4fcf4b7e63065e91080cb5f90006404a6417eb1..04038a2568409ad503a03215b57941d13c7e8528 100755 (executable)
@@ -44,6 +44,7 @@ re_valid_pkg_name = re.compile(r"^[\dA-Za-z][\dA-Za-z\+\-\.]+$")
 re_changelog_versions = re.compile(r"^\w[-+0-9a-z.]+ \([^\(\) \t]+\)")
 re_strip_revision = re.compile(r"-([^-]+)$")
 re_strip_srcver = re.compile(r"\s+\(\S+\)$")
+re_spacestrip = re.compile('(\s)')
 
 ################################################################################
 
@@ -461,6 +462,18 @@ def check_files():
             if depends == '':
                 reject("%s: Depends field is empty." % (file))
 
+            # Sanity-check the Provides field
+            provides = control.Find("Provides")
+            if provides:
+                provide = re_spacestrip.sub('', provides)
+                if provide == '':
+                    reject("%s: Provides field is empty." % (file))
+                prov_list = provide.split(",")
+                for prov in prov_list:
+                    if not re_valid_pkg_name.match(prov):
+                        reject("%s: Invalid Provides field content %s." % (file, prov))
+
+
             # Check the section & priority match those given in the .changes (non-fatal)
             if control.Find("Section") and files[file]["section"] != "" and files[file]["section"] != control.Find("Section"):
                 reject("%s control file lists section as `%s', but changes file has `%s'." % (file, control.Find("Section", ""), files[file]["section"]), "Warning: ")
@@ -916,14 +929,32 @@ def check_hashes ():
     else:
         hashes = []
 
+    for x in changes:
+        if x.startswith("checksum-"):
+           h = x.split("-",1)[1] 
+           if h not in dict(hashes):
+               reject("Unsupported checksum field in .changes" % (h))
+
+    for x in dsc:
+        if x.startswith("checksum-"):
+           h = x.split("-",1)[1] 
+           if h not in dict(hashes):
+               reject("Unsupported checksum field in .dsc" % (h))
+
     for h,f in hashes:
-        fs = daklib.utils.build_file_list(changes, 0, "checksums-%s" % h, h)
-        check_hash( ".changes %s" % (h), fs, h, f, files)
+        try:
+            fs = daklib.utils.build_file_list(changes, 0, "checksums-%s" % h, h)
+            check_hash(".changes %s" % (h), fs, h, f, files)
+       except daklib.utils.no_files_exc:
+           reject("No Checksums-%s: field in .changes file" % (h))
 
         if "source" not in changes["architecture"]: continue
 
-        fs = daklib.utils.build_file_list(dsc, 1, "checksums-%s" % h, h)
-        check_hash( ".dsc %s" % (h), fs, h, f, dsc_files)
+        try:
+            fs = daklib.utils.build_file_list(dsc, 1, "checksums-%s" % h, h)
+            check_hash(".dsc %s" % (h), fs, h, f, dsc_files)
+       except daklib.utils.no_files_exc:
+           reject("No Checksums-%s: field in .changes file" % (h))
 
 ################################################################################
 
@@ -1054,6 +1085,12 @@ def check_signed_by_key():
         if uid_name == "": sponsored = 1
     else:
         sponsored = 1
+        if ("source" in changes["architecture"] and
+            daklib.utils.is_email_alias(uid_email)):
+            sponsor_addresses = daklib.utils.gpg_get_key_addresses(changes["fingerprint"])
+            if (changes["maintaineremail"] not in sponsor_addresses and
+                changes["changedbyemail"] not in sponsor_addresses):
+                changes["sponsoremail"] = uid_email
 
     if sponsored and not may_sponsor: 
         reject("%s is not authorised to sponsor uploads" % (uid))