]> git.decadent.org.uk Git - dak.git/blobdiff - dak/process_unchecked.py
process_unchecked: fix bug when dealing with unrecognised file types in .dsc Files:
[dak.git] / dak / process_unchecked.py
index 66d3feff52856c11e2a2a7fbb116e9dc6b166ad4..c4ebd99472e9d820746a25ff5483a20a99addc80 100755 (executable)
@@ -255,7 +255,7 @@ def check_changes():
     # Check there isn't already a changes file of the same name in one
     # of the queue directories.
     base_filename = os.path.basename(filename)
-    for dir in [ "Accepted", "Byhand", "Done", "New", "ProposedUpdates" ]:
+    for dir in [ "Accepted", "Byhand", "Done", "New", "ProposedUpdates", "OldProposedUpdates" ]:
         if os.path.exists(Cnf["Dir::Queue::%s" % (dir) ]+'/'+base_filename):
             reject("%s: a file with this name already exists in the %s directory." % (base_filename, dir))
 
@@ -404,7 +404,7 @@ def check_files():
 
     for file in file_keys:
         # Ensure the file does not already exist in one of the accepted directories
-        for dir in [ "Accepted", "Byhand", "New", "ProposedUpdates" ]:
+        for dir in [ "Accepted", "Byhand", "New", "ProposedUpdates", "OldProposedUpdates" ]:
             if os.path.exists(Cnf["Dir::Queue::%s" % (dir) ]+'/'+file):
                 reject("%s file already exists in the %s directory." % (file, dir))
         if not daklib.utils.re_taint_free.match(file):
@@ -540,7 +540,7 @@ def check_files():
                         files[file]["new"] = 1
                     else:
                        dsc_file_exists = 0
-                        for myq in ["Accepted", "Embargoed", "Unembargoed", "ProposedUpdates"]:
+                        for myq in ["Accepted", "Embargoed", "Unembargoed", "ProposedUpdates", "OldProposedUpdates"]:
                            if Cnf.has_key("Dir::Queue::%s" % (myq)):
                                if os.path.exists(Cnf["Dir::Queue::"+myq] + '/' + dsc_filename):
                                    dsc_file_exists = 1
@@ -757,6 +757,7 @@ def check_dsc():
         m = daklib.utils.re_issource.match(f)
         if not m:
             reject("%s: %s in Files field not recognised as source." % (dsc_filename, f))
+           continue
         type = m.group(3)
         if type == "orig.tar.gz" or type == "tar.gz":
             has_tar = 1
@@ -1093,16 +1094,19 @@ def action ():
     # q-unapproved hax0ring
     queue_info = {
          "New": { "is": is_new, "process": acknowledge_new },
+        "Autobyhand" : { "is" : is_autobyhand, "process": do_autobyhand },
          "Byhand" : { "is": is_byhand, "process": do_byhand },
+         "OldStableUpdate" : { "is": is_oldstableupdate, 
+                               "process": do_oldstableupdate },
          "StableUpdate" : { "is": is_stableupdate, "process": do_stableupdate },
          "Unembargo" : { "is": is_unembargo, "process": queue_unembargo },
          "Embargo" : { "is": is_embargo, "process": queue_embargo },
     }
-    queues = [ "New", "Byhand" ]
+    queues = [ "New", "Autobyhand", "Byhand" ]
     if Cnf.FindB("Dinstall::SecurityQueueHandling"):
         queues += [ "Unembargo", "Embargo" ]
     else:
-        queues += [ "StableUpdate" ]
+        queues += [ "OldStableUpdate", "StableUpdate" ]
 
     (prompt, answer) = ("", "XXX")
     if Options["No-Action"] or Options["Automatic"]:
@@ -1157,7 +1161,7 @@ def action ():
         accept(summary, short_summary)
         remove_from_unchecked()
     elif answer == queuekey:
-        queue_info[queue]["process"](summary)
+        queue_info[queue]["process"](summary, short_summary)
         remove_from_unchecked()
     elif answer == 'Q':
         sys.exit(0)
@@ -1208,7 +1212,7 @@ def is_unembargo ():
 
     return 0
 
-def queue_unembargo (summary):
+def queue_unembargo (summary, short_summary):
     print "Moving to UNEMBARGOED holding area."
     Logger.log(["Moving to unembargoed", pkg.changes_file])
 
@@ -1225,7 +1229,7 @@ def queue_unembargo (summary):
 def is_embargo ():
     return 0
 
-def queue_embargo (summary):
+def queue_embargo (summary, short_summary):
     print "Moving to EMBARGOED holding area."
     Logger.log(["Moving to embargoed", pkg.changes_file])
 
@@ -1244,18 +1248,18 @@ def is_stableupdate ():
        return 0
 
     if not changes["architecture"].has_key("source"):
-        pusuite = database.get_suite_id("proposed-updates")
+        pusuite = daklib.database.get_suite_id("proposed-updates")
         q = Upload.projectB.query(
           "SELECT S.source FROM source s JOIN src_associations sa ON (s.id = sa.source) WHERE s.source = '%s' AND s.version = '%s' AND sa.suite = %d" % 
           (changes["source"], changes["version"], pusuite))
         ql = q.getresult()
         if ql:
-            # source is already in proposed-updates
+            # source is already in proposed-updates so no need to hold
             return 0
 
     return 1
 
-def do_stableupdate (summary):
+def do_stableupdate (summary, short_summary):
     print "Moving to PROPOSED-UPDATES holding area."
     Logger.log(["Moving to proposed-updates", pkg.changes_file]);
 
@@ -1268,13 +1272,100 @@ def do_stableupdate (summary):
 
 ################################################################################
 
+def is_oldstableupdate ():
+    if not changes["distribution"].has_key("oldstable-proposed-updates"):
+       return 0
+
+    if not changes["architecture"].has_key("source"):
+        pusuite = daklib.database.get_suite_id("oldstable-proposed-updates")
+        q = Upload.projectB.query(
+          "SELECT S.source FROM source s JOIN src_associations sa ON (s.id = sa.source) WHERE s.source = '%s' AND s.version = '%s' AND sa.suite = %d" % 
+          (changes["source"], changes["version"], pusuite))
+        ql = q.getresult()
+        if ql:
+            # source is already in oldstable-proposed-updates so no need to hold
+            return 0
+
+    return 1
+
+def do_oldstableupdate (summary, short_summary):
+    print "Moving to OLDSTABLE-PROPOSED-UPDATES holding area."
+    Logger.log(["Moving to oldstable-proposed-updates", pkg.changes_file]);
+
+    Upload.dump_vars(Cnf["Dir::Queue::OldProposedUpdates"]);
+    move_to_dir(Cnf["Dir::Queue::OldProposedUpdates"])
+
+    # Check for override disparities
+    Upload.Subst["__SUMMARY__"] = summary;
+    Upload.check_override();
+
+################################################################################
+
+def is_autobyhand ():
+    all_auto = 1
+    any_auto = 0
+    for file in files.keys():
+        if files[file].has_key("byhand"):
+           any_auto = 1
+
+           # filename is of form "PKG_VER_ARCH.EXT" where PKG, VER and ARCH
+           # don't contain underscores, and ARCH doesn't contain dots.
+           # further VER matches the .changes Version:, and ARCH should be in
+           # the .changes Architecture: list.
+           if file.count("_") < 2:
+               all_auto = 0
+               continue
+       
+           (pkg, ver, archext) = file.split("_", 2)
+           if archext.count(".") < 1 or changes["version"] != ver:
+               all_auto = 0
+               continue
+
+           ABH = Cnf.SubTree("AutomaticByHandPackages")
+           if not ABH.has_key(pkg) or \
+             ABH["%s::Source" % (pkg)] != changes["source"]:
+               print "not match %s %s" % (pkg, changes["source"])
+               all_auto = 0
+               continue
+
+           (arch, ext) = archext.split(".", 1)
+           if arch not in changes["architecture"]:
+               all_auto = 0
+               continue
+
+           files[file]["byhand-arch"] = arch
+           files[file]["byhand-script"] = ABH["%s::Script" % (pkg)]
+
+    return any_auto and all_auto
+
+def do_autobyhand (summary, short_summary):
+    print "Accepting AUTOBYHAND."
+    for file in files.keys():
+       byhandfile = file
+        if not files[file].has_key("byhand-script"):
+           # problem!
+           pass
+       else:
+           os.system("ls -l %s" % byhandfile)
+            result = os.system("%s %s %s %s" % (
+               files[file]["byhand-script"], byhandfile, 
+               changes["version"], files[file]["byhand-arch"]))
+           if result != 0:
+               print "error?"
+       os.unlink(byhandfile)
+       del files[file]
+
+    accept(summary, short_summary)
+
+################################################################################
+
 def is_byhand ():
     for file in files.keys():
         if files[file].has_key("byhand"):
             return 1
     return 0
 
-def do_byhand (summary):
+def do_byhand (summary, short_summary):
     print "Moving to BYHAND holding area."
     Logger.log(["Moving to byhand", pkg.changes_file])
 
@@ -1293,7 +1384,7 @@ def is_new ():
             return 1
     return 0
 
-def acknowledge_new (summary):
+def acknowledge_new (summary, short_summary):
     Subst = Upload.Subst
 
     print "Moving to NEW holding area."