From: Anthony Towns Date: Tue, 28 Aug 2007 06:46:09 +0000 (+1000) Subject: * process_unchecked.py: Add support for automatic BYHAND X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=847d581f684595642a21857fe1ef03b76edf346e;p=dak * process_unchecked.py: Add support for automatic BYHAND processing. * config/debian/dak.conf, scripts/debian/byhand-tag: Automatic processing of tag-overrides. --- diff --git a/ChangeLog b/ChangeLog index 3c8ee17b..64b9754e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-08-28 Anthony Towns + + * 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 * Add nm.debian.org pseudopackage diff --git a/config/debian/dak.conf b/config/debian/dak.conf index 9bc64d52..5e8f206d 100644 --- a/config/debian/dak.conf +++ b/config/debian/dak.conf @@ -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/"; diff --git a/dak/process_unchecked.py b/dak/process_unchecked.py index d7eb6e41..77e5f00a 100755 --- a/dak/process_unchecked.py +++ b/dak/process_unchecked.py @@ -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 index 00000000..3bb32808 --- /dev/null +++ b/scripts/debian/byhand-tag @@ -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