[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] 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.
---
 ChangeLog          |    8 +++++
 dak/process_new.py |   82 +++++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 80 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9ee80a8..6af8f75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-08-07  Philipp Kern  <pkern@debian.org>
+
+	* 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  <joerg@debian.org>
 
 	* 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 aaae058..6b37d69 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
-- 
1.5.6



Reply to: