X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=jennifer;h=e11153fc49f13241efde802c10ad699643202c7c;hb=4d40ad73b577700f97128cdea5e2e177baf38e6a;hp=92055bf28cfcb245c523ad07f6fc1b2feee74a2f;hpb=dd0ee5b67c650470139ffa8a50ae6b83a92ca76a;p=dak.git diff --git a/jennifer b/jennifer index 92055bf2..e11153fc 100755 --- a/jennifer +++ b/jennifer @@ -2,7 +2,7 @@ # Checks Debian packages from Incoming # Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 James Troup -# $Id: jennifer,v 1.57 2005-11-15 09:50:32 ajt Exp $ +# $Id: jennifer,v 1.65 2005-12-05 05:35:47 ajt 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 @@ -45,7 +45,7 @@ re_strip_revision = re.compile(r"-([^-]+)$"); ################################################################################ # Globals -jennifer_version = "$Revision: 1.57 $"; +jennifer_version = "$Revision: 1.65 $"; Cnf = None; Options = None; @@ -230,6 +230,9 @@ def check_changes(): changes["changedbyname"], changes["changedbyemail"]) = \ utils.fix_maintainer (changes.get("changed-by", "")); except utils.ParseMaintError, msg: + (changes["changedby822"], changes["changedby2047"], + changes["changedbyname"], changes["changedbyemail"]) = \ + ("", "", "", "") reject("%s: Changed-By field ('%s') failed to parse: %s" \ % (filename, changes["changed-by"], msg)); @@ -535,8 +538,7 @@ def check_files(): # Check the version and for file overwrites reject(Katie.check_binary_against_db(file),""); - # [JT - 2005/05/31; disabled for now, will go back on post-sarge] - #check_deb_ar(file, control) + check_deb_ar(file, control) # Checks for a source package... else: @@ -1034,17 +1036,23 @@ def action (): (summary, short_summary) = Katie.build_summaries(); - byhand = new = ""; - for file in files.keys(): - if files[file].has_key("byhand"): - byhand = 1 - elif files[file].has_key("new"): - new = 1 + # q-unapproved hax0ring + queue_info = { + "New": { "is": is_new, "process": acknowledge_new }, + "Byhand" : { "is": is_byhand, "process": do_byhand }, + "Unembargo" : { "is": is_unembargo, "process": queue_unembargo }, + "Embargo" : { "is": is_embargo, "process": queue_embargo }, + } + queues = [ "New", "Byhand" ] + if Cnf.FindB("Dinstall::SecurityQueueHandling"): + queues += [ "Unembargo", "Embargo" ] (prompt, answer) = ("", "XXX") if Options["No-Action"] or Options["Automatic"]: answer = 'S' + queuekey = '' + if reject_message.find("Rejected") != -1: if upload_too_new(): print "SKIP (too new)\n" + reject_message,; @@ -1054,21 +1062,29 @@ def action (): prompt = "[R]eject, Skip, Quit ?"; if Options["Automatic"]: answer = 'R'; - elif new: - print "NEW to %s\n%s%s" % (", ".join(changes["distribution"].keys()), reject_message, summary),; - prompt = "[N]ew, Skip, Quit ?"; - if Options["Automatic"]: - answer = 'N'; - elif byhand: - print "BYHAND\n" + reject_message + summary,; - prompt = "[B]yhand, Skip, Quit ?"; - if Options["Automatic"]: - answer = 'B'; else: - print "ACCEPT\n" + reject_message + summary,; - prompt = "[A]ccept, Skip, Quit ?"; - if Options["Automatic"]: - answer = 'A'; + queue = None + for q in queues: + if queue_info[q]["is"](): + queue = q + break + if queue: + print "%s for %s\n%s%s" % ( + queue.upper(), ", ".join(changes["distribution"].keys()), + reject_message, summary), + queuekey = queue[0].upper() + if queuekey in "RQSA": + queuekey = "D" + prompt = "[D]ivert, Skip, Quit ?" + else: + prompt = "[%s]%s, Skip, Quit ?" % (queuekey, queue[1:].lower()) + if Options["Automatic"]: + answer = queuekey + else: + print "ACCEPT\n" + reject_message + summary,; + prompt = "[A]ccept, Skip, Quit ?"; + if Options["Automatic"]: + answer = 'A'; while prompt.find(answer) == -1: answer = utils.our_raw_input(prompt); @@ -1082,52 +1098,110 @@ def action (): Katie.do_reject(0, reject_message); elif answer == 'A': accept(summary, short_summary); - elif answer == 'B': - do_byhand(summary); - elif answer == 'N': - acknowledge_new (summary); + remove_from_unchecked() + elif answer == queuekey: + queue_info[queue]["process"](summary) + remove_from_unchecked() elif answer == 'Q': sys.exit(0) +def remove_from_unchecked(): + os.chdir (pkg.directory); + for file in files.keys(): + os.unlink(file); + os.unlink(pkg.changes_file); + ################################################################################ def accept (summary, short_summary): Katie.accept(summary, short_summary); Katie.check_override(); - # Finally, remove the originals from the unchecked directory - os.chdir (pkg.directory); - for file in files.keys(): - os.unlink(file); - os.unlink(pkg.changes_file); +################################################################################ + +def move_to_dir (dest, perms=0660, changesperms=0664): + utils.move (pkg.changes_file, dest, perms=changesperms); + file_keys = files.keys(); + for file in file_keys: + utils.move (file, dest, perms=perms); + +################################################################################ + +def is_unembargo (): + q = Katie.projectB.query( + "SELECT package FROM disembargo WHERE package = '%s' AND version = '%s'" % + (changes["source"], changes["version"])) + ql = q.getresult() + if ql: + return 1 + + if pkg.directory == Cnf["Dir::Queue::Disembargo"].rstrip("/"): + if changes["architecture"].has_key("source"): + if Options["No-Action"]: return 1 + + Katie.projectB.query( + "INSERT INTO disembargo (package, version) VALUES ('%s', '%s')" % + (changes["source"], changes["version"])) + return 1 + + return 0 + +def queue_unembargo (summary): + print "Moving to UNEMBARGOED holding area." + Logger.log(["Moving to unembargoed", pkg.changes_file]); + + Katie.dump_vars(Cnf["Dir::Queue::Unembargoed"]); + move_to_dir(Cnf["Dir::Queue::Unembargoed"]) + Katie.queue_build("unembargoed", Cnf["Dir::Queue::Unembargoed"]) + + # Check for override disparities + Katie.Subst["__SUMMARY__"] = summary; + Katie.check_override(); ################################################################################ +def is_embargo (): + return 0 + +def queue_embargo (summary): + print "Moving to EMBARGOED holding area." + Logger.log(["Moving to embargoed", pkg.changes_file]); + + Katie.dump_vars(Cnf["Dir::Queue::Embargoed"]); + move_to_dir(Cnf["Dir::Queue::Embargoed"]) + Katie.queue_build("embargoed", Cnf["Dir::Queue::Embargoed"]) + + # Check for override disparities + Katie.Subst["__SUMMARY__"] = summary; + Katie.check_override(); + +################################################################################ + +def is_byhand (): + for file in files.keys(): + if files[file].has_key("byhand"): + return 1 + return 0 + def do_byhand (summary): print "Moving to BYHAND holding area." Logger.log(["Moving to byhand", pkg.changes_file]); Katie.dump_vars(Cnf["Dir::Queue::Byhand"]); - - file_keys = files.keys(); - - # Move all the files into the byhand directory - utils.move (pkg.changes_file, Cnf["Dir::Queue::Byhand"]); - for file in file_keys: - utils.move (file, Cnf["Dir::Queue::Byhand"], perms=0660); + move_to_dir(Cnf["Dir::Queue::Byhand"]) # Check for override disparities Katie.Subst["__SUMMARY__"] = summary; Katie.check_override(); - # Finally remove the originals. - os.chdir (pkg.directory); - for file in file_keys: - os.unlink(file); - os.unlink(pkg.changes_file); - ################################################################################ +def is_new (): + for file in files.keys(): + if files[file].has_key("new"): + return 1 + return 0 + def acknowledge_new (summary): Subst = Katie.Subst; @@ -1135,13 +1209,7 @@ def acknowledge_new (summary): Logger.log(["Moving to new", pkg.changes_file]); Katie.dump_vars(Cnf["Dir::Queue::New"]); - - file_keys = files.keys(); - - # Move all the files into the 'new' directory - utils.move (pkg.changes_file, Cnf["Dir::Queue::New"]); - for file in file_keys: - utils.move (file, Cnf["Dir::Queue::New"], perms=0660); + move_to_dir(Cnf["Dir::Queue::New"]) if not Options["No-Mail"]: print "Sending new ack."; @@ -1149,12 +1217,6 @@ def acknowledge_new (summary): new_ack_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/jennifer.new"); utils.send_mail(new_ack_message); - # Finally remove the originals. - os.chdir (pkg.directory); - for file in file_keys: - os.unlink(file); - os.unlink(pkg.changes_file); - ################################################################################ # reprocess is necessary for the case of foo_1.2-1 and foo_1.2-2 in