]> git.decadent.org.uk Git - dak.git/commitdiff
* process_unchecked.py: Add support for automatic BYHAND
authorAnthony Towns <aj@azure.humbug.org.au>
Tue, 28 Aug 2007 06:46:09 +0000 (16:46 +1000)
committerAnthony Towns <aj@azure.humbug.org.au>
Tue, 28 Aug 2007 06:46:09 +0000 (16:46 +1000)
processing.
* config/debian/dak.conf, scripts/debian/byhand-tag: Automatic
processing of tag-overrides.

ChangeLog
config/debian/dak.conf
dak/process_unchecked.py
scripts/debian/byhand-tag [new file with mode: 0755]

index 3c8ee17bd556611d200c550894dd81a2827fbf31..64b9754ec73a250fec86c69aa81eafdbe30df5fc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-08-28  Anthony Towns  <ajt@debian.org>
+
+       * process_unchecked.py: Add support for automatic BYHAND
+       processing.
+       * config/debian/dak.conf, scripts/debian/byhand-tag: Automatic
+       processing of tag-overrides.
+
 2007-06-19  Anthony Towns  <ajt@debian.org>
 
        * Add nm.debian.org pseudopackage
index 9bc64d52aadd23bec57da5a0bc556aba67fd6e34..5e8f206d8df1c3dc553369745f1faf86e901e6e6 100644 (file)
@@ -628,6 +628,22 @@ SuiteMappings
  "map-unreleased testing-proposed-updates unstable";
 };
 
+AutomaticByHandPackages {
+  "debian-installer-images" {
+    Source "xxx-debian-installer";
+    Section "raw-installer";
+    Extension "tar.gz";
+    Script "/srv/ftp.debian.org/dak/scripts/debian/byhand-di";
+  };
+
+  "tag-overrides" {
+    Source "tag-overrides";
+    Section "byhand";
+    Extension "tar.gz";
+    Script "/srv/ftp.debian.org/dak/scripts/debian/byhand-tag";
+  };
+};
+
 Dir
 {
   Root "/srv/ftp.debian.org/ftp/";
index d7eb6e41af738ee1334df72e086a941e3f41dcb1..77e5f00af52b5e5d62e5c7fc422f92a67ac3b7fb 100755 (executable)
@@ -1093,6 +1093,7 @@ 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 },
@@ -1100,7 +1101,7 @@ def action ():
          "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:
@@ -1159,7 +1160,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)
@@ -1210,7 +1211,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])
 
@@ -1227,7 +1228,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])
 
@@ -1257,7 +1258,7 @@ def is_stableupdate ():
 
     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]);
 
@@ -1286,7 +1287,7 @@ def is_oldstableupdate ():
 
     return 1
 
-def do_oldstableupdate (summary):
+def do_oldstableupdate (summary, short_summary):
     print "Moving to OLDSTABLE-PROPOSED-UPDATES holding area."
     Logger.log(["Moving to oldstable-proposed-updates", pkg.changes_file]);
 
@@ -1299,13 +1300,71 @@ def do_oldstableupdate (summary):
 
 ################################################################################
 
+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])
 
@@ -1324,7 +1383,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."
diff --git a/scripts/debian/byhand-tag b/scripts/debian/byhand-tag
new file mode 100755 (executable)
index 0000000..3bb3280
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh -ue
+
+# Tarball to read, compressed with gzip
+INPUT="${1:?"Usage: $0 filename"}"
+
+# Regular expression used to validate tag lines
+CHECKRE='^[a-z0-9A-Z.+-]+[[:space:]]+Tag[[:space:]]+[a-z0-9:. ,+-]+$'
+
+# This must end with /
+TARGET=/srv/ftp.debian.org/scripts/external-overrides/
+
+# Read the main directory from the tarball
+DIR="`tar ztf \"$INPUT\" | tac | tail -n 1`"
+
+# Create temporary files where to store the validated data
+umask 002
+OUTMAIN="`mktemp \"$TARGET\"tag.new.XXXXXX`"
+OUTCONTRIB="`mktemp \"$TARGET\"tag.contrib.new.XXXXXX`"
+OUTNONFREE="`mktemp \"$TARGET\"tag.non-free.new.XXXXXX`"
+
+# If we fail somewhere, cleanup the temporary files
+cleanup() {
+        rm -f "$OUTMAIN"
+        rm -f "$OUTCONTRIB"
+        rm -f "$OUTNONFREE"
+}
+trap cleanup EXIT
+
+# Extract the data into the temporary files
+tar -O -zxf "$INPUT" "$DIR"tag | grep -E "$CHECKRE" > "$OUTMAIN"
+tar -O -zxf "$INPUT" "$DIR"tag.contrib | grep -E "$CHECKRE" > "$OUTCONTRIB"
+tar -O -zxf "$INPUT" "$DIR"tag.non-free | grep -E "$CHECKRE" > "$OUTNONFREE"
+
+# Move the data to the final location
+mv "$OUTMAIN"           "$TARGET"tag
+mv "$OUTCONTRIB"        "$TARGET"tag.contrib
+mv "$OUTNONFREE"        "$TARGET"tag.non-free
+
+chmod 644 "$TARGET"tag "$TARGET"tag.contrib "$TARGET"tag.non-free
+
+trap - EXIT
+
+exit 0