X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=8c96dc0637d7955cf6afad5c49a6d6dcd07e7a85;hb=d4699ba04f5b98bed2513f58946296d4a479c8ea;hp=3cc4053861896fa5023780d5b484bab61d6eab40;hpb=b8d7ece580cbfb35624fe493938edcb0ae921b15;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py old mode 100644 new mode 100755 index 3cc40538..8c96dc06 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -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 @@ -115,7 +116,12 @@ def open_file(filename, mode='r'): def our_raw_input(prompt=""): if prompt: - sys.stdout.write(prompt) + while 1: + try: + sys.stdout.write(prompt) + break + except IOError: + pass sys.stdout.flush() try: ret = raw_input() @@ -262,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 ################################################################################ @@ -567,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() @@ -1339,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