From: Philipp Kern Date: Thu, 7 Aug 2008 22:57:11 +0000 (-0300) Subject: dak/process_new.py: handle uploads to (oldstable)-proposed-updates differently X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=e07739afa4dcba75d0211de2d90f7146344d6a1b;p=dak.git dak/process_new.py: handle uploads to (oldstable)-proposed-updates differently Uploads targetting proposed-updates used to hit NEW first and were going to proposed-updates without further review by SRM afterwards. This patch fixes this behaviour by sending the upload to p-u-new after NEW processing. If an upload is sourceful it is moved right away. If it is not its corresponding source is searched in p-u holding, new, accepted and in the archive and moved appropriately into the right queue. --- diff --git a/ChangeLog b/ChangeLog index 9ee80a8c..6af8f757 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-08-07 Philipp Kern + + * dak/process_new.py (do_accept): handle uploads to (oldstable-) + proposed-updates differently and put them into p-u holding + for review instead of unconditionally accepting them into + p-u proper; additional care needed to be taken to look + out for the source if a binary-only upload is being handled + 2008-08-07 Joerg Jaspert * dak/cruft_report.py (parse_nfu): call utils.warn instead of warn diff --git a/dak/process_new.py b/dak/process_new.py index aaae0581..6b37d699 100755 --- a/dak/process_new.py +++ b/dak/process_new.py @@ -813,21 +813,83 @@ def move_to_dir (dest, perms=0660, changesperms=0664): for f in file_keys: utils.move (f, dest, perms=perms) +def is_source_in_queue_dir(qdir): + entries = [ x for x in os.listdir(qdir) if x.startswith(Upload.pkg.changes["source"]) + and x.endswith(".changes") ] + for entry in entries: + # read the .dak + u = queue.Upload(Cnf) + u.pkg.changes_file = entry + u.update_vars() + if not changes["architecture"].has_key("source"): + # another binary upload, ignore + continue + if Upload.pkg.changes["version"] != u.pkg.changes["version"]: + # another version, ignore + continue + # found it! + return True + return False + +def move_to_holding(suite, queue_dir): + print "Moving to %s holding area." % (suite.upper(),) + Logger.log(["Moving to %s" % (suite,), Upload.pkg.changes_file]) + Upload.dump_vars(queue_dir) + move_to_dir(queue_dir) + os.unlink(Upload.pkg.changes_file[:-8]+".dak") + +def do_accept_stableupdate(suite, q): + queue_dir = Cnf["Dir::Queue::%s" % (q,)] + if not Upload.pkg.changes["architecture"].has_key("source"): + # It is not a sourceful upload. So its source may be either in p-u + # holding, in new, in accepted or already installed. + if is_source_in_qdir(queue_dir): + # It's in p-u holding, so move it there. + move_to_holding(suite, queue_dir) + if is_source_in_qdir(Cnf["Dir::Queue::New"]): + # It's in NEW. We expect the source to land in p-u holding + # pretty soon. + move_to_holding(suite, queue_dir) + if is_source_in_qdir(Cnf["Dir::Queue::Accepted"]): + # The source is in accepted, the binary cleared NEW: accept it. + Upload.accept(summary, short_summary) + os.unlink(Upload.pkg.changes_file[:-8]+".dak") + if Upload.source_exists(Upload.pkg.changes["source"], + Upload.pkg.changes["version"]): + # dak tells us that there is source available. At time of + # writing this means that it is installed, so put it into + # accepted. + Upload.accept(summary, short_summary) + os.unlink(Upload.pkg.changes_file[:-8]+".dak") + move_to_holding(suite, queue_dir) + def do_accept(): print "ACCEPT" if not Options["No-Action"]: get_accept_lock() (summary, short_summary) = Upload.build_summaries() - 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: - Upload.accept(summary, short_summary) - os.unlink(Upload.pkg.changes_file[:-8]+".dak") - os.unlink(Cnf["Process-New::AcceptedLockFile"]) + 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... + Upload.accept(summary, short_summary) + os.unlink(Upload.pkg.changes_file[:-8]+".dak") + finally: + os.unlink(Cnf["Process-New::AcceptedLockFile"]) def check_status(files): new = byhand = 0