X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=katie;h=4858485042cc9b77fb76397060ee46e2d17e3bf8;hb=a9d36073e85871bd2938b7ab74e2e09e9c40030d;hp=1c611a7eb634583bd77afa2b448659811081379c;hpb=779bb0691d139ff2487383c6aa9d87b149bad294;p=dak.git diff --git a/katie b/katie index 1c611a7e..48584850 100755 --- a/katie +++ b/katie @@ -2,7 +2,7 @@ # Installs Debian packaes # Copyright (C) 2000 James Troup -# $Id: katie,v 1.23 2001-01-27 00:09:36 troup Exp $ +# $Id: katie,v 1.29 2001-02-09 22:15:45 troup Exp $ # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -39,8 +39,6 @@ import utils, db_access ############################################################################### re_isanum = re.compile (r'^\d+$'); -re_isadeb = re.compile (r'.*\.u?deb$'); -re_issource = re.compile (r'(.+)_(.+?)\.(orig\.tar\.gz|diff\.gz|tar\.gz|dsc)'); re_changes = re.compile (r'changes$'); re_default_answer = re.compile(r"\[(.*)\]"); re_fdnic = re.compile("\n\n"); @@ -159,18 +157,20 @@ def in_override_p (package, component, suite, binary_type, file): def check_changes(filename): global reject_message, changes, files - # Parse the .changes field into a dictionary [FIXME - need to trap errors, pass on to reject_message etc.] + # Default in case we bail out + changes["maintainer822"] = Cnf["Dinstall::MyEmailAddress"]; + + # Parse the .changes field into a dictionary try: - changes = utils.parse_changes(filename) + changes = utils.parse_changes(filename, 0) except utils.cant_open_exc: reject_message = "Rejected: can't read changes file '%s'.\n" % (filename) return 0; except utils.changes_parse_error_exc, line: reject_message = "Rejected: error parsing changes file '%s', can't grok: %s.\n" % (filename, line) - changes["maintainer822"] = Cnf["Dinstall::MyEmailAddress"]; return 0; - # Parse the Files field from the .changes into another dictionary [FIXME need to trap errors as above] + # Parse the Files field from the .changes into another dictionary try: files = utils.build_file_list(changes, ""); except utils.changes_parse_error_exc, line: @@ -182,9 +182,6 @@ def check_changes(filename): reject_message = "Rejected: Missing field `%s' in changes file.\n" % (i) return 0 # Avoid errors during later tests - # Fix the Maintainer: field to be RFC822 compatible - (changes["maintainer822"], changes["maintainername"], changes["maintaineremail"]) = utils.fix_maintainer (changes["maintainer"]) - # Override the Distribution: field if appropriate if Cnf["Dinstall::Options::Override-Distribution"] != "": reject_message = reject_message + "Warning: Distribution was overriden from %s to %s.\n" % (changes["distribution"], Cnf["Dinstall::Options::Override-Distribution"]) @@ -199,6 +196,17 @@ def check_changes(filename): for j in string.split(o): changes[i][j] = 1 + # Fix the Maintainer: field to be RFC822 compatible + (changes["maintainer822"], changes["maintainername"], changes["maintaineremail"]) = utils.fix_maintainer (changes["maintainer"]) + + # Fix the Changed-By: field to be RFC822 compatible; if it exists. + (changes["changedby822"], changes["changedbyname"], changes["changedbyemail"]) = utils.fix_maintainer(changes.get("changed-by","")); + + # For source uploads the Changed-By field wins; otherwise Maintainer wins. + if changes["architecture"].has_key("source"): + changes["uploader822"] = "To: %s\nCc: %s" % (changes["changedby822"], changes["maintainer822"]); + # changes["uploadername"], changes["uploaderemail"]) = (changes["changedby822"], changes["changedbyname"], changes["changedbyemail"]); + # Ensure all the values in Closes: are numbers if changes.has_key("closes"): for i in changes["closes"].keys(): @@ -288,7 +296,7 @@ def check_files(): files[file]["byhand"] = 1; files[file]["type"] = "byhand"; # Checks for a binary package... - elif re_isadeb.match(file) != None: + elif utils.re_isadeb.match(file) != None: files[file]["type"] = "deb"; # Extract package information using dpkg-deb @@ -342,7 +350,7 @@ def check_files(): files[file]["source"] = files[file]["package"]; # Checks for a source package... else: - m = re_issource.match(file) + m = utils.re_issource.match(file) if m != None: files[file]["package"] = m.group(1) files[file]["version"] = m.group(2) @@ -419,6 +427,10 @@ def check_files(): if component_id == -1: reject_message = reject_message + "Rejected: file '%s' has unknown component '%s'.\n" % (file, component); continue; + + # Validate the priority + if string.find(files[file]["priority"],'/') != -1: + reject_message = reject_message + "Rejected: file '%s' has invalid priority '%s' [contains '/'].\n" % (file, files[file]["priority"]); # Check the md5sum & size against existing files (if any) location = Cnf["Dir::PoolDir"]; @@ -450,13 +462,16 @@ def check_dsc (): for file in files.keys(): if files[file]["type"] == "dsc": try: - dsc = utils.parse_changes(file) + dsc = utils.parse_changes(file, 1) except utils.cant_open_exc: reject_message = reject_message + "Rejected: can't read changes file '%s'.\n" % (filename) return 0; except utils.changes_parse_error_exc, line: reject_message = reject_message + "Rejected: error parsing changes file '%s', can't grok: %s.\n" % (filename, line) return 0; + except utils.invalid_dsc_format_exc, line: + reject_message = reject_message + "Rejected: syntax error in .dsc file '%s', line %s.\n" % (filename, line) + return 0; try: dsc_files = utils.build_file_list(dsc, 1) except utils.no_files_exc: @@ -494,7 +509,6 @@ def check_dsc (): q = projectB.query("SELECT l.path, f.filename, l.type, f.id FROM files f, location l WHERE (f.filename ~ '/%s$' OR f.filename = '%s') AND l.id = f.location" % (utils.regex_safe(dsc_file), dsc_file)); ql = q.getresult(); - if ql != []: # Unfortunately, we make get more than one match # here if, for example, the package was in potato @@ -599,19 +613,18 @@ def check_override (): summary = "" for file in files.keys(): - if not files[file].has_key("new") and (files[file]["type"] == "dsc" or files[file]["type"] == "deb"): + if not files[file].has_key("new") and files[file]["type"] == "deb": section = files[file]["section"]; override_section = files[file]["override section"]; if section != override_section and section != "-": # Ignore this; it's a common mistake and not worth whining about - if section == "non-US/main" and override_section == "non-US": + if string.lower(section) == "non-us/main" and string.lower(override_section) == "non-us": continue; summary = summary + "%s: section is overridden from %s to %s.\n" % (file, section, override_section); - if files[file]["type"] == "deb": # don't do priority for source - priority = files[file]["priority"]; - override_priority = files[file]["override priority"]; - if priority != override_priority and priority != "-": - summary = summary + "%s: priority is overridden from %s to %s.\n" % (file, priority, override_priority); + priority = files[file]["priority"]; + override_priority = files[file]["override priority"]; + if priority != override_priority and priority != "-": + summary = summary + "%s: priority is overridden from %s to %s.\n" % (file, priority, override_priority); if summary == "": return; @@ -931,7 +944,7 @@ def stable_install (changes_filename, summary, short_summary): for file in files.keys(): if files[file]["type"] == "deb": new_changelog.write("stable/%s/binary-%s/%s\n" % (files[file]["component"], files[file]["architecture"], file)); - elif re_issource.match(file) != None: + elif utils.re_issource.match(file) != None: new_changelog.write("stable/%s/source/%s\n" % (files[file]["component"], file)); else: new_changelog.write("%s\n" % (file)); @@ -974,15 +987,15 @@ def reject (changes_filename, manual_reject_mail_filename): # Move the .changes files and it's contents into REJECT/ (if we can; errors are ignored) try: utils.move (changes_filename, "%s/REJECT/%s" % (Cnf["Dir::IncomingDir"], base_changes_filename)); - except utils.cant_overwrite_exc: - sys.stderr.write("W: couldn't overwrite existing file '%s/REJECT/%s" % (Cnf["Dir::IncomingDir"], base_changes_filename)); + except: + sys.stderr.write("W: couldn't reject changes file '%s' [Got %s]" % (base_changes_filename, sys.exc_type)); pass; for file in files.keys(): if os.path.exists(file): try: utils.move (file, "%s/REJECT/%s" % (Cnf["Dir::IncomingDir"], file)); except: - sys.stderr.write("W: couldn't reject file '%s' [Got %s].\n" % (file, sys.exc_type); + sys.stderr.write("W: couldn't reject file '%s' [Got %s].\n" % (file, sys.exc_type)); pass; # If this is not a manual rejection generate the .reason file and rejection mail message @@ -1152,7 +1165,7 @@ administrators by mailing ftpmaster@debian.org) control_message = "" for bug in bugs: summary = summary + "%s " % (bug) - control_message = control_message + "severity %s fixed\n" % (bug) + control_message = control_message + "tag %s + fixed\n" % (bug) if action and control_message != "": mail_message = """Return-Path: %s From: %s @@ -1184,7 +1197,7 @@ non-maintainer upload. The .changes file follows. # into the .changes structure and reprocess the .changes file. def process_it (changes_file): - global reprocess, orig_tar_id, changes, dsc, dsc_files, files; + global reprocess, orig_tar_id, changes, dsc, dsc_files, files, reject_message; # Reset some globals reprocess = 1; @@ -1222,7 +1235,7 @@ def process_it (changes_file): ############################################################################### def main(): - global Cnf, projectB, reject_message, install_bytes, new_ack_old + global Cnf, projectB, install_bytes, new_ack_old apt_pkg.init();