X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fprocess_new.py;h=4619df0f564cdb050edabd44a6b5267c54ce8142;hb=b612f3da207fa0d75a5d3b204ac8f02bb244231a;hp=52e1f4e9780350d722e533a0a179b0f290a4c577;hpb=35cd0972b5e14dc8727403e13fccd30776f3ae02;p=dak.git diff --git a/dak/process_new.py b/dak/process_new.py index 52e1f4e9..4619df0f 100755 --- a/dak/process_new.py +++ b/dak/process_new.py @@ -59,7 +59,7 @@ from daklib import logging from daklib import queue from daklib import utils from daklib.regexes import re_no_epoch, re_default_answer, re_isanum -from daklib.dak_exceptions import CantOpenError, AlreadyLockedError +from daklib.dak_exceptions import CantOpenError, AlreadyLockedError, CantGetLockError # Globals Cnf = None #: Configuration, apt_pkg.Configuration @@ -101,7 +101,7 @@ def recheck(): source_epochless_version = re_no_epoch.sub('', source_version) dsc_filename = "%s_%s.dsc" % (source_package, source_epochless_version) found = 0 - for q in ["Accepted", "Embargoed", "Unembargoed"]: + for q in ["Accepted", "Embargoed", "Unembargoed", "Newstage"]: if Cnf.has_key("Dir::Queue::%s" % (q)): if os.path.exists(Cnf["Dir::Queue::%s" % (q)] + '/' + dsc_filename): found = 1 @@ -225,7 +225,7 @@ def sort_changes(changes_files): mtime = os.stat(d["filename"])[stat.ST_MTIME] if mtime < oldest: oldest = mtime - have_note += (database.has_new_comment(d["source"], d["version"])) + have_note += (database.has_new_comment(d["source"], d["version"], True)) per_source[source]["oldest"] = oldest if not have_note: per_source[source]["note_state"] = 0; # none @@ -496,7 +496,8 @@ def edit_note(note): elif answer == 'Q': end() sys.exit(0) - database.add_new_comment(Upload.pkg.changes["source"], Upload.pkg.changes["version"], newnote, utils.whoami()) + + database.add_new_comment(Upload.pkg.changes["source"], Upload.pkg.changes["version"], newnote, utils.whoami(), bool(Options["Trainee"])) ################################################################################ @@ -675,7 +676,7 @@ def do_new(): print "W: [!] marked entries must be fixed before package can be processed." if note: print "W: note must be removed before package can be processed." - prompt += "Remove note, " + prompt += "RemOve all notes, Remove note, " prompt += "Edit overrides, Check, Manual reject, Note edit, Prod, [S]kip, Quit ?" @@ -687,7 +688,13 @@ def do_new(): answer = answer[:1].upper() if answer == 'A' and not Options["Trainee"]: - done = add_overrides (new) + try: + check_daily_lock() + done = add_overrides (new) + Logger.log([utils.getusername(), "NEW ACCEPT: %s" % (Upload.pkg.changes_file)]) + except CantGetLockError: + print "Hello? Operator! Give me the number for 911!" + print "Dinstall in the locked area, cant process packages, come back later" elif answer == 'C': check_pkg() elif answer == 'E' and not Options["Trainee"]: @@ -697,16 +704,22 @@ def do_new(): reject_message=Options["Manual-Reject"], note=database.get_new_comments(changes.get("source", ""))) if not aborted: + Logger.log([utils.getusername(), "NEW REJECT: %s" % (Upload.pkg.changes_file)]) os.unlink(Upload.pkg.changes_file[:-8]+".dak") done = 1 elif answer == 'N': edit_note(database.get_new_comments(changes.get("source", ""))) elif answer == 'P' and not Options["Trainee"]: prod_maintainer(database.get_new_comments(changes.get("source", ""))) + Logger.log([utils.getusername(), "NEW PROD: %s" % (Upload.pkg.changes_file)]) elif answer == 'R' and not Options["Trainee"]: confirm = utils.our_raw_input("Really clear note (y/N)? ").lower() if confirm == "y": database.delete_new_comments(changes.get("source"), changes.get("version")) + elif answer == 'O' and not Options["Trainee"]: + confirm = utils.our_raw_input("Really clear all notes (y/N)? ").lower() + if confirm == "y": + database.delete_all_new_comments(changes.get("source")) elif answer == 'S': done = 1 elif answer == 'Q': @@ -761,7 +774,7 @@ def init(): try: Logger = Upload.Logger = logging.Logger(Cnf, "process-new") except CantOpenError, e: - Options["Trainee"] = "Oh yes" + Options["Trainee"] = "True" projectB = Upload.projectB @@ -806,10 +819,17 @@ def do_byhand(): answer = answer[:1].upper() if answer == 'A': - done = 1 - for f in byhand: - del files[f] + try: + check_daily_lock() + done = 1 + for f in byhand: + del files[f] + Logger.log([utils.getusername(), "BYHAND ACCEPT: %s" % (Upload.pkg.changes_file)]) + except CantGetLockError: + print "Hello? Operator! Give me the number for 911!" + print "Dinstall in the locked area, cant process packages, come back later" elif answer == 'M': + Logger.log([utils.getusername(), "BYHAND REJECT: %s" % (Upload.pkg.changes_file)]) Upload.do_reject(1, Options["Manual-Reject"]) os.unlink(Upload.pkg.changes_file[:-8]+".dak") done = 1 @@ -821,22 +841,18 @@ def do_byhand(): ################################################################################ -def get_accept_lock(): - retry = 0 - while retry < 10: - try: - os.open(Cnf["Process-New::AcceptedLockFile"], os.O_RDONLY | os.O_CREAT | os.O_EXCL) - retry = 10 - except OSError, e: - if e.errno == errno.EACCES or e.errno == errno.EEXIST: - retry += 1 - if (retry >= 10): - utils.fubar("Couldn't obtain lock; assuming 'dak process-unchecked' is already running.") - else: - print("Unable to get accepted lock (try %d of 10)" % retry) - time.sleep(60) - else: - raise +def check_daily_lock(): + """ + Raises CantGetLockError if the dinstall daily.lock exists. + """ + + try: + os.open(Cnf["Process-New::DinstallLockFile"], os.O_RDONLY | os.O_CREAT | os.O_EXCL) + except OSError, e: + if e.errno == errno.EEXIST or e.errno == errno.EACCES: + raise CantGetLockError + + os.unlink(Cnf["Process-New::DinstallLockFile"]) @contextlib.contextmanager @@ -898,7 +914,7 @@ def _accept(): if Options["No-Action"]: return (summary, short_summary) = Upload.build_summaries() - Upload.accept(summary, short_summary) + Upload.accept(summary, short_summary, targetdir=Cnf["Dir::Queue::Newstage"]) os.unlink(Upload.pkg.changes_file[:-8]+".dak") def do_accept_stableupdate(suite, q): @@ -916,16 +932,23 @@ def do_accept_stableupdate(suite, q): # writing this means that it is installed, so put it into # accepted. print "Binary-only upload, source installed." + Logger.log([utils.getusername(), "PUNEW ACCEPT: %s" % (Upload.pkg.changes_file)]) _accept() elif is_source_in_queue_dir(Cnf["Dir::Queue::Accepted"]): # The source is in accepted, the binary cleared NEW: accept it. print "Binary-only upload, source in accepted." + Logger.log([utils.getusername(), "PUNEW ACCEPT: %s" % (Upload.pkg.changes_file)]) _accept() elif is_source_in_queue_dir(Cnf["Dir::Queue::New"]): # It's in NEW. We expect the source to land in p-u holding # pretty soon. print "Binary-only upload, source in new." move_to_holding(suite, queue_dir) + elif is_source_in_queue_dir(Cnf["Dir::Queue::Newstage"]): + # It's in newstage. Accept into the holding area + print "Binary-only upload, source in newstage." + Logger.log([utils.getusername(), "PUNEW ACCEPT: %s" % (Upload.pkg.changes_file)]) + _accept() else: # No case applicable. Bail out. Return will cause the upload # to be skipped. @@ -944,30 +967,25 @@ def do_accept_stableupdate(suite, q): def do_accept(): print "ACCEPT" if not Options["No-Action"]: - get_accept_lock() (summary, short_summary) = Upload.build_summaries() - try: - if Cnf.FindB("Dinstall::SecurityQueueHandling"): - Upload.dump_vars(Cnf["Dir::Queue::Embargoed"]) - move_to_dir(Cnf["Dir::Queue::Embargoed"]) - Upload.queue_build("embargoed", Cnf["Dir::Queue::Embargoed"]) - # Check for override disparities - Upload.Subst["__SUMMARY__"] = summary - else: - # Stable updates need to be copied to proposed-updates holding - # area instead of accepted. Sourceful uploads need to go - # to it directly, binaries only if the source has not yet been - # accepted into p-u. - for suite, q in [("proposed-updates", "ProposedUpdates"), - ("oldstable-proposed-updates", "OldProposedUpdates")]: - if not Upload.pkg.changes["distribution"].has_key(suite): - continue - return do_accept_stableupdate(suite, q) - # Just a normal upload, accept it... - _accept() - finally: - if not Options["No-Action"]: - os.unlink(Cnf["Process-New::AcceptedLockFile"]) + if Cnf.FindB("Dinstall::SecurityQueueHandling"): + Upload.dump_vars(Cnf["Dir::Queue::Embargoed"]) + move_to_dir(Cnf["Dir::Queue::Embargoed"]) + Upload.queue_build("embargoed", Cnf["Dir::Queue::Embargoed"]) + # Check for override disparities + Upload.Subst["__SUMMARY__"] = summary + else: + # Stable updates need to be copied to proposed-updates holding + # area instead of accepted. Sourceful uploads need to go + # to it directly, binaries only if the source has not yet been + # accepted into p-u. + for suite, q in [("proposed-updates", "ProposedUpdates"), + ("oldstable-proposed-updates", "OldProposedUpdates")]: + if not Upload.pkg.changes["distribution"].has_key(suite): + continue + return do_accept_stableupdate(suite, q) + # Just a normal upload, accept it... + _accept() def check_status(files): new = byhand = 0 @@ -999,7 +1017,12 @@ def do_pkg(changes_file): (new, byhand) = check_status(files) if not new and not byhand: - do_accept() + try: + check_daily_lock() + do_accept() + except CantGetLockError: + print "Hello? Operator! Give me the number for 911!" + print "Dinstall in the locked area, cant process packages, come back later" except AlreadyLockedError, e: print "Seems to be locked by %s already, skipping..." % (e) @@ -1014,7 +1037,7 @@ def end(): if accept_count > 1: sets = "sets" sys.stderr.write("Accepted %d package %s, %s.\n" % (accept_count, sets, utils.size_type(int(accept_bytes)))) - Logger.log(["total",accept_count,accept_bytes]) + Logger.log([utils.getusername(), "total",accept_count,accept_bytes]) if not Options["No-Action"] and not Options["Trainee"]: Logger.close() @@ -1100,6 +1123,7 @@ def main(): if not changes_file: continue print "\n" + changes_file + do_pkg (changes_file) end()