X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fprocess_new.py;h=b7010532e5c358141049efb22085936526f7e4d9;hb=5147b67a4c51905b6e35927b7a022e063a730d8a;hp=6af50896a1a512fed590e30fd87de3586b561233;hpb=e2ae71066cbb134753d7bfceb16e87d0b76dfd6e;p=dak.git diff --git a/dak/process_new.py b/dak/process_new.py index 6af50896..b7010532 100755 --- a/dak/process_new.py +++ b/dak/process_new.py @@ -94,7 +94,7 @@ def recheck(): (reject_msg, is_in_incoming) = Upload.check_dsc_against_db(file) reject(reject_msg) - if reject_message: + if reject_message.find("Rejected") != -1: answer = "XXX" if Options["No-Action"] or Options["Automatic"]: answer = 'S' @@ -163,10 +163,10 @@ def determine_new (changes, files): new[pkg]["othercomponents"] = f["othercomponents"] for suite in changes["suite"].keys(): - suite_id = database.get_suite_id(suite) + suite_id = daklib.database.get_suite_id(suite) for pkg in new.keys(): - component_id = database.get_component_id(new[pkg]["component"]) - type_id = database.get_override_type_id(new[pkg]["type"]) + component_id = daklib.database.get_component_id(new[pkg]["component"]) + type_id = daklib.database.get_override_type_id(new[pkg]["type"]) q = projectB.query("SELECT package FROM override WHERE package = '%s' AND suite = %s AND component = %s AND type = %s" % (pkg, suite_id, component_id, type_id)) ql = q.getresult() if ql: @@ -325,11 +325,11 @@ def check_valid (new): section = new[pkg]["section"] priority = new[pkg]["priority"] type = new[pkg]["type"] - new[pkg]["section id"] = database.get_section_id(section) - new[pkg]["priority id"] = database.get_priority_id(new[pkg]["priority"]) + new[pkg]["section id"] = daklib.database.get_section_id(section) + new[pkg]["priority id"] = daklib.database.get_priority_id(new[pkg]["priority"]) # Sanity checks - if (section == "debian-installer" and type != "udeb") or \ - (section != "debian-installer" and type == "udeb"): + di = section.find("debian-installer") != -1 + if (di and type != "udeb") or (not di and type == "udeb"): new[pkg]["section id"] = -1 if (priority == "source" and type != "dsc") or \ (priority != "source" and type == "dsc"): @@ -376,7 +376,7 @@ def get_type (f): daklib.utils.fubar("invalid type (%s) for new. Dazed, confused and sure as heck not continuing." % (type)) # Validate the override type - type_id = database.get_override_type_id(type) + type_id = daklib.database.get_override_type_id(type) if type_id == -1: daklib.utils.fubar("invalid type (%s) for new. Say wha?" % (type)) @@ -517,7 +517,7 @@ def edit_overrides (new): got_answer = 0 while not got_answer: answer = daklib.utils.our_raw_input(prompt) - if not daklib.utils.str_isnum(answer): + if not answer.isdigit(): answer = answer[:1].upper() if answer == "E" or answer == "D": got_answer = 1 @@ -624,10 +624,10 @@ def add_overrides (new): projectB.query("BEGIN WORK") for suite in changes["suite"].keys(): - suite_id = database.get_suite_id(suite) + suite_id = daklib.database.get_suite_id(suite) for pkg in new.keys(): - component_id = database.get_component_id(new[pkg]["component"]) - type_id = database.get_override_type_id(new[pkg]["type"]) + component_id = daklib.database.get_component_id(new[pkg]["component"]) + type_id = daklib.database.get_override_type_id(new[pkg]["type"]) priority_id = new[pkg]["priority id"] section_id = new[pkg]["section id"] projectB.query("INSERT INTO override (suite, component, type, package, priority, section, maintainer) VALUES (%s, %s, %s, '%s', %s, %s, '')" % (suite_id, component_id, type_id, pkg, priority_id, section_id)) @@ -701,11 +701,19 @@ def do_new(): for suite in changes["suite"].keys(): override = Cnf.Find("Suite::%s::OverrideSuite" % (suite)) if override: + (olderr, newerr) = (daklib.database.get_suite_id(suite) == -1, + daklib.database.get_suite_id(override) == -1) + if olderr or newerr: + (oinv, newinv) = ("", "") + if olderr: oinv = "invalid " + if newerr: ninv = "invalid " + print "warning: overriding %ssuite %s to %ssuite %s" % ( + oinv, suite, ninv, override) del changes["suite"][suite] changes["suite"][override] = 1 # Validate suites for suite in changes["suite"].keys(): - suite_id = database.get_suite_id(suite) + suite_id = daklib.database.get_suite_id(suite) if suite_id == -1: daklib.utils.fubar("%s has invalid suite '%s' (possibly overriden). say wha?" % (changes, suite)) @@ -788,10 +796,11 @@ def init(): Arguments = [('a',"automatic","Process-New::Options::Automatic"), ('h',"help","Process-New::Options::Help"), + ('C',"comments-dir","Process-New::Options::Comments-Dir", "HasArg"), ('m',"manual-reject","Process-New::Options::Manual-Reject", "HasArg"), ('n',"no-action","Process-New::Options::No-Action")] - for i in ["automatic", "help", "manual-reject", "no-action", "version"]: + for i in ["automatic", "help", "manual-reject", "no-action", "version", "comments-dir"]: if not Cnf.has_key("Process-New::Options::%s" % (i)): Cnf["Process-New::Options::%s" % (i)] = "" @@ -934,6 +943,59 @@ def end(): ################################################################################ +def do_comments(dir, opref, npref, line, fn): + for comm in [ x for x in os.listdir(dir) if x.startswith(opref) ]: + lines = open("%s/%s" % (dir, comm)).readlines() + if len(lines) == 0 or lines[0] != line + "\n": continue + changes_files = [ x for x in os.listdir(".") if x.startswith(comm[7:]+"_") + and x.endswith(".changes") ] + changes_files = sort_changes(changes_files) + for f in changes_files: + f = daklib.utils.validate_changes_file_arg(f, 0) + if not f: continue + print "\n" + f + fn(f, "".join(lines[1:])) + + if opref != npref and not Options["No-Action"]: + newcomm = npref + comm[len(opref):] + os.rename("%s/%s" % (dir, comm), "%s/%s" % (dir, newcomm)) + +################################################################################ + +def comment_accept(changes_file, comments): + Upload.pkg.changes_file = changes_file + Upload.init_vars() + Upload.update_vars() + Upload.update_subst() + files = Upload.pkg.files + + if not recheck(): + return # dak wants to REJECT, crap + + (new, byhand) = check_status(files) + if not new and not byhand: + do_accept() + +################################################################################ + +def comment_reject(changes_file, comments): + Upload.pkg.changes_file = changes_file + Upload.init_vars() + Upload.update_vars() + Upload.update_subst() + files = Upload.pkg.files + + if not recheck(): + pass # dak has its own reasons to reject as well, which is fine + + reject(comments) + print "REJECT\n" + reject_message, + if not Options["No-Action"]: + Upload.do_reject(0, reject_message) + os.unlink(Upload.pkg.changes_file[:-8]+".dak") + +################################################################################ + def main(): changes_files = init() if len(changes_files) > 50: @@ -942,18 +1004,26 @@ def main(): # Kill me now? **FIXME** Cnf["Dinstall::Options::No-Mail"] = "" - bcc = "X-DAK: dak process-new\nX-Katie: this header is obsolete" + bcc = "X-DAK: dak process-new\nX-Katie: lisa $Revision: 1.31 $" if Cnf.has_key("Dinstall::Bcc"): Upload.Subst["__BCC__"] = bcc + "\nBcc: %s" % (Cnf["Dinstall::Bcc"]) else: Upload.Subst["__BCC__"] = bcc - for changes_file in changes_files: - changes_file = daklib.utils.validate_changes_file_arg(changes_file, 0) - if not changes_file: - continue - print "\n" + changes_file - do_pkg (changes_file) + commentsdir = Cnf.get("Process-New::Options::Comments-Dir","") + if commentsdir: + if changes_files != []: + sys.stderr.write("Can't specify any changes files if working with comments-dir") + sys.exit(1) + do_comments(commentsdir, "ACCEPT.", "ACCEPTED.", "OK", comment_accept) + do_comments(commentsdir, "REJECT.", "REJECTED.", "NOTOK", comment_reject) + else: + for changes_file in changes_files: + changes_file = daklib.utils.validate_changes_file_arg(changes_file, 0) + if not changes_file: + continue + print "\n" + changes_file + do_pkg (changes_file) end()