X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fprocess_new.py;h=e3dc5de13e735a35b479335a60841cf18256db97;hb=1dd3d2fb2df2af57cf3966e257a94e000235407a;hp=0b71541bc0f8ea72bb4be1c5899a47cd549a8c76;hpb=ffa6f7b4004942f0f1a83dc8a7766fc3a5f0ae0f;p=dak.git diff --git a/dak/process_new.py b/dak/process_new.py index 0b71541b..e3dc5de1 100755 --- a/dak/process_new.py +++ b/dak/process_new.py @@ -137,7 +137,7 @@ def print_new (upload, missing, indexed, session, file=sys.stdout): if not m['valid']: line = line + ' [!]' print >>file, line - notes = get_new_comments(upload.changes.source) + notes = get_new_comments(upload.policy_queue, upload.changes.source) for note in notes: print "\nAuthor: %s\nVersion: %s\nTimestamp: %s\n\n%s" \ % (note.author, note.version, note.notedate, note.comment) @@ -457,7 +457,6 @@ def get_reject_reason(reason=''): ################################################################################ def do_new(upload, upload_copy, handler, session): - print "NEW\n" cnf = Config() run_user_inspect_command(upload, upload_copy) @@ -472,9 +471,22 @@ def do_new(upload, upload_copy, handler, session): missing = handler.missing_overrides(hints=missing) broken = not check_valid(missing, session) + changesname = os.path.basename(upload.changes.changesname) + + print + print changesname + print "-" * len(changesname) + print + print " Target: {0}".format(upload.target_suite.suite_name) + print " Changed-By: {0}".format(upload.changes.changedby) + print + #if len(byhand) == 0 and len(missing) == 0: # break + if missing: + print "NEW\n" + answer = "XXX" if Options["No-Action"] or Options["Automatic"]: answer = 'S' @@ -515,36 +527,31 @@ def do_new(upload, upload_copy, handler, session): continue if answer == 'A' and not Options["Trainee"]: - try: - check_daily_lock() - add_overrides(missing, upload.target_suite, session) - if Config().find_b("Dinstall::BXANotify"): - do_bxa_notification(missing, upload, session) - handler.accept() - done = True - Logger.log(["NEW ACCEPT", upload.changes.changesname]) - except CantGetLockError: - print "Hello? Operator! Give me the number for 911!" - print "Dinstall in the locked area, cant process packages, come back later" + add_overrides(missing, upload.target_suite, session) + if Config().find_b("Dinstall::BXANotify"): + do_bxa_notification(missing, upload, session) + handler.accept() + done = True + Logger.log(["NEW ACCEPT", upload.changes.changesname]) elif answer == 'C': check_pkg(upload, upload_copy, session) elif answer == 'E' and not Options["Trainee"]: missing = edit_overrides (missing, upload, session) elif answer == 'M' and not Options["Trainee"]: reason = Options.get('Manual-Reject', '') + "\n" - reason = reason + "\n".join([n.comment for n in get_new_comments(upload.changes.source, session=session)]) + reason = reason + "\n\n=====\n\n".join([n.comment for n in get_new_comments(upload.policy_queue, upload.changes.source, session=session)]) reason = get_reject_reason(reason) if reason is not None: Logger.log(["NEW REJECT", upload.changes.changesname]) handler.reject(reason) done = True elif answer == 'N': - if edit_note(get_new_comments(upload.changes.source, session=session), + if edit_note(get_new_comments(upload.policy_queue, upload.changes.source, session=session), upload, session, bool(Options["Trainee"])) == 0: end() sys.exit(0) elif answer == 'P' and not Options["Trainee"]: - if prod_maintainer(get_new_comments(upload.changes.source, session=session), + if prod_maintainer(get_new_comments(upload.policy_queue, upload.changes.source, session=session), upload) == 0: end() sys.exit(0) @@ -552,13 +559,13 @@ def do_new(upload, upload_copy, handler, session): elif answer == 'R' and not Options["Trainee"]: confirm = utils.our_raw_input("Really clear note (y/N)? ").lower() if confirm == "y": - for c in get_new_comments(upload.changes.source, upload.changes.version, session=session): + for c in get_new_comments(upload.policy_queue, upload.changes.source, upload.changes.version, session=session): session.delete(c) session.commit() elif answer == 'O' and not Options["Trainee"]: confirm = utils.our_raw_input("Really clear all notes (y/N)? ").lower() if confirm == "y": - for c in get_new_comments(upload.changes.source, session=session): + for c in get_new_comments(upload.policy_queue, upload.changes.source, session=session): session.delete(c) session.commit() @@ -568,6 +575,9 @@ def do_new(upload, upload_copy, handler, session): end() sys.exit(0) + if handler.get_action(): + print "PENDING %s\n" % handler.get_action() + ################################################################################ ################################################################################ ################################################################################ @@ -580,6 +590,7 @@ def usage (exit_code=0): -h, --help show this help and exit. -m, --manual-reject=MSG manual reject with `msg' -n, --no-action don't do anything + -q, --queue=QUEUE operate on a different queue -t, --trainee FTP Trainee mode -V, --version display the version number and exit @@ -609,24 +620,6 @@ ENVIRONMENT VARIABLES ################################################################################ -def check_daily_lock(): - """ - Raises CantGetLockError if the dinstall daily.lock exists. - """ - - cnf = Config() - try: - lockfile = cnf.get("Process-New::DinstallLockFile", - os.path.join(cnf['Dir::Lock'], 'processnew.lock')) - - os.open(lockfile, - os.O_RDONLY | os.O_CREAT | os.O_EXCL) - except OSError as e: - if e.errno == errno.EEXIST or e.errno == errno.EACCES: - raise CantGetLockError - - os.unlink(lockfile) - @contextlib.contextmanager def lock_package(package): """ @@ -657,6 +650,8 @@ def do_pkg(upload, session): dsc = upload.source cnf = Config() + group = cnf.get('Dinstall::UnprivGroup') or None + #bcc = "X-DAK: dak process-new" #if cnf.has_key("Dinstall::Bcc"): # u.Subst["__BCC__"] = bcc + "\nBcc: %s" % (cnf["Dinstall::Bcc"]) @@ -665,9 +660,10 @@ def do_pkg(upload, session): try: with lock_package(upload.changes.source): - with UploadCopy(upload) as upload_copy: + with UploadCopy(upload, group=group) as upload_copy: handler = PolicyQueueUploadHandler(upload, session) if handler.get_action() is not None: + print "PENDING %s\n" % handler.get_action() return do_new(upload, upload_copy, handler, session) @@ -693,13 +689,13 @@ def show_new_comments(uploads, session): ################################################################################ -def sort_uploads(uploads, session, nobinaries=False): +def sort_uploads(new_queue, uploads, session, nobinaries=False): sources = {} sorteduploads = [] suitesrc = [s.source for s in session.query(DBSource.source). \ filter(DBSource.suites.any(Suite.suite_name.in_(['unstable', 'experimental'])))] comments = [p.package for p in session.query(NewComment.package). \ - filter_by(trainee=False).distinct()] + filter_by(trainee=False, policy_queue=new_queue).distinct()] for upload in uploads: source = upload.changes.source if not source in sources: @@ -792,14 +788,12 @@ def main(): if len(uploads) > 1: sys.stderr.write("Sorting changes...\n") - uploads = sort_uploads(uploads, session, Options["No-Binaries"]) + uploads = sort_uploads(new_queue, uploads, session, Options["No-Binaries"]) if Options["Comments"]: show_new_comments(uploads, session) else: for upload in uploads: - print "\n" + os.path.basename(upload.changes.changesname) - do_pkg (upload, session) end()