X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fprocess_new.py;h=740ce6e809968daaf9c83a4426763b014577848a;hb=310e68d162db3006294b9df3d4d715bb9ceac822;hp=041a60e09d198748f13785881104e5084e18facb;hpb=53181135f740882c19553c2a8146de6a3041910c;p=dak.git diff --git a/dak/process_new.py b/dak/process_new.py index 041a60e0..740ce6e8 100755 --- a/dak/process_new.py +++ b/dak/process_new.py @@ -428,7 +428,7 @@ def do_new(upload, session): done = 0 while not done: # Find out what's new - new = determine_new(changes, files) + new, byhand = determine_new(upload.pkg.changes_file, changes, files, session=session) if not new: break @@ -485,7 +485,7 @@ def do_new(upload, session): done = 1 elif answer == 'N': edit_note(get_new_comments(changes.get("source", ""), session=session), - upload, session) + upload, session, bool(Options["Trainee"])) elif answer == 'P' and not Options["Trainee"]: prod_maintainer(get_new_comments(changes.get("source", ""), session=session), upload) @@ -516,6 +516,8 @@ def do_new(upload, session): def usage (exit_code=0): print """Usage: dak process-new [OPTION]... [CHANGES]... -a, --automatic automatic run + -b, --no-binaries do not sort binary-NEW packages first + -c, --comments show NEW comments -h, --help show this help and exit. -m, --manual-reject=MSG manual reject with `msg' -n, --no-action don't do anything @@ -529,14 +531,14 @@ def do_byhand(upload, session): done = 0 while not done: files = upload.pkg.files - will_install = 1 + will_install = True byhand = [] for f in files.keys(): - if files[f]["type"] == "byhand": + if files[f]["section"] == "byhand": if os.path.exists(f): print "W: %s still present; please process byhand components and try again." % (f) - will_install = 0 + will_install = False else: byhand.append(f) @@ -558,21 +560,39 @@ def do_byhand(upload, session): answer = answer[:1].upper() if answer == 'A': - try: - check_daily_lock() - done = 1 - for f in byhand: - del files[f] - Logger.log(["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" + dbchg = get_dbchange(upload.pkg.changes_file, session) + if dbchg is None: + print "Warning: cannot find changes file in database; can't process BYHAND" + else: + try: + check_daily_lock() + done = 1 + for b in byhand: + # Find the file entry in the database + found = False + for f in dbchg.files: + if f.filename == b: + found = True + f.processed = True + break + + if not found: + print "Warning: Couldn't find BYHAND item %s in the database to mark it processed" % b + + session.commit() + Logger.log(["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(["BYHAND REJECT: %s" % (upload.pkg.changes_file)]) - upload.do_reject(manual=1, reject_message=Options["Manual-Reject"]) - upload.pkg.remove_known_changes(session=session) - session.commit() - done = 1 + aborted = upload.do_reject(manual=1, + reject_message=Options["Manual-Reject"], + notes=get_new_comments(changes.get("source", ""), session=session)) + if not aborted: + upload.pkg.remove_known_changes(session=session) + session.commit() + Logger.log(["BYHAND REJECT: %s" % (upload.pkg.changes_file)]) + done = 1 elif answer == 'S': done = 1 elif answer == 'Q': @@ -634,13 +654,15 @@ class clean_holding(object): os.unlink(os.path.join(h.holding_dir, f)) -def do_pkg(changes_file, session): - new_queue = get_policy_queue('new', session ); +def do_pkg(changes_full_path, session): + changes_dir = os.path.dirname(changes_full_path) + changes_file = os.path.basename(changes_full_path) + u = Upload() u.pkg.changes_file = changes_file (u.pkg.changes["fingerprint"], rejects) = utils.check_signature(changes_file) u.load_changes(changes_file) - u.pkg.directory = new_queue.path + u.pkg.directory = changes_dir u.update_subst() u.logger = Logger origchanges = os.path.abspath(u.pkg.changes_file) @@ -669,9 +691,10 @@ def do_pkg(changes_file, session): if not recheck(u, session): return - # FIXME: This does need byhand checks added! - new = determine_new(u.pkg.changes, files) - if new: + new, byhand = determine_new(u.pkg.changes_file, u.pkg.changes, files, session=session) + if byhand: + do_byhand(u, session) + elif new: do_new(u, session) else: try: @@ -684,6 +707,23 @@ def do_pkg(changes_file, session): except AlreadyLockedError, e: print "Seems to be locked by %s already, skipping..." % (e) +def show_new_comments(changes_files, session): + sources = set() + query = """SELECT package, version, comment, author + FROM new_comments + WHERE package IN ('""" + + for changes in changes_files: + sources.add(os.path.basename(changes).split("_")[0]) + + query += "%s') ORDER BY package, version" % "', '".join(sources) + r = session.execute(query) + + for i in r: + print "%s_%s\n%s\n(%s)\n\n\n" % (i[0], i[1], i[2], i[3]) + + session.commit() + ################################################################################ def end(): @@ -709,19 +749,23 @@ def main(): session = DBConn().session() Arguments = [('a',"automatic","Process-New::Options::Automatic"), + ('b',"no-binaries","Process-New::Options::No-Binaries"), + ('c',"comments","Process-New::Options::Comments"), ('h',"help","Process-New::Options::Help"), ('m',"manual-reject","Process-New::Options::Manual-Reject", "HasArg"), ('t',"trainee","Process-New::Options::Trainee"), ('n',"no-action","Process-New::Options::No-Action")] - for i in ["automatic", "help", "manual-reject", "no-action", "version", "trainee"]: + for i in ["automatic", "no-binaries", "comments", "help", "manual-reject", "no-action", "version", "trainee"]: if not cnf.has_key("Process-New::Options::%s" % (i)): cnf["Process-New::Options::%s" % (i)] = "" changes_files = apt_pkg.ParseCommandLine(cnf.Cnf,Arguments,sys.argv) if len(changes_files) == 0: new_queue = get_policy_queue('new', session ); - changes_files = utils.get_changes_files(new_queue.path) + changes_paths = [ os.path.join(new_queue.path, j) for j in utils.get_changes_files(new_queue.path) ] + else: + changes_paths = [ os.path.abspath(j) for j in changes_files ] Options = cnf.SubTree("Process-New::Options") @@ -738,17 +782,20 @@ def main(): Priorities = Priority_Completer(session) readline.parse_and_bind("tab: complete") - if len(changes_files) > 1: + if len(changes_paths) > 1: sys.stderr.write("Sorting changes...\n") - changes_files = sort_changes(changes_files, session) + changes_files = sort_changes(changes_paths, session, Options["No-Binaries"]) - for changes_file in changes_files: - changes_file = utils.validate_changes_file_arg(changes_file, 0) - if not changes_file: - continue - print "\n" + changes_file + if Options["Comments"]: + show_new_comments(changes_files, session) + else: + for changes_file in changes_files: + changes_file = utils.validate_changes_file_arg(changes_file, 0) + if not changes_file: + continue + print "\n" + os.path.basename(changes_file) - do_pkg (changes_file, session) + do_pkg (changes_file, session) end()