]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/utils.py
utils, parse_changes
[dak.git] / daklib / utils.py
old mode 100644 (file)
new mode 100755 (executable)
index cfbf8aa..8c96dc0
@@ -44,7 +44,8 @@ from dak_exceptions import *
 from textutils import fix_maintainer
 from regexes import re_html_escaping, html_escaping, re_single_line_field, \
                     re_multi_line_field, re_srchasver, re_taint_free, \
-                    re_gpg_uid, re_re_mark, re_whitespace_comment, re_issource
+                    re_gpg_uid, re_re_mark, re_whitespace_comment, re_issource, \
+                    re_is_orig_source
 
 from formats import parse_format, validate_changes_format
 from srcformats import get_format_from_string
@@ -267,7 +268,21 @@ def parse_changes(filename, signing_rules=0):
         unicode(content, 'utf-8')
     except UnicodeError:
         raise ChangesUnicodeError, "Changes file not proper utf-8"
-    return parse_deb822(content, signing_rules)
+    changes = parse_deb822(content, signing_rules)
+
+    # Finally ensure that everything needed is there
+    must_keywords = ('Format', 'Date', 'Source', 'Binary', 'Architecture', 'Version',
+                     'Distribution', 'Maintainer', 'Description', 'Changes', 'Files')
+
+    missingfields=[]
+    for keyword in must_keywords:
+        if not changes.has_key(keyword.lower()):
+            missingfields.append(keyword)
+
+    if len(missingfields):
+        raise ParseChangesError, "Missing mandantory field(s) in changes file (policy 5.5): %s" % (missingfields)
+
+    return changes
 
 ################################################################################
 
@@ -572,6 +587,10 @@ def build_file_list(changes, is_a_dsc=0, field="files", hashname="md5sum"):
 def send_mail (message, filename=""):
     """sendmail wrapper, takes _either_ a message string or a file as arguments"""
 
+    # Check whether we're supposed to be sending mail
+    if Cnf.has_key("Dinstall::Options::No-Mail") and Cnf["Dinstall::Options::No-Mail"]:
+        return
+
     # If we've been passed a string dump it into a temporary file
     if message:
         (fd, filename) = tempfile.mkstemp()
@@ -1344,9 +1363,9 @@ def check_signature (sig_filename, data_filename="", keyrings=None, autofetch=No
     if exit_status:
         rejects.append("gpgv failed while checking %s." % (sig_filename))
         if status.strip():
-            rejects.append(prefix_multi_line_string(status, " [GPG status-fd output:] "), "")
+            rejects.append(prefix_multi_line_string(status, " [GPG status-fd output:] "))
         else:
-            rejects.append(prefix_multi_line_string(output, " [GPG output:] "), "")
+            rejects.append(prefix_multi_line_string(output, " [GPG output:] "))
         return (None, rejects)
 
     # Sanity check the good stuff we expect