# Checks Debian packages from Incoming
# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 James Troup <james@nocrew.org>
-# $Id: jennifer,v 1.60 2005-11-25 09:35:09 ajt Exp $
+# $Id: jennifer,v 1.61 2005-12-05 03:45:12 ajt Exp $
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
################################################################################
# Globals
-jennifer_version = "$Revision: 1.60 $";
+jennifer_version = "$Revision: 1.61 $";
Cnf = None;
Options = None;
(summary, short_summary) = Katie.build_summaries();
# q-unapproved hax0ring
- queues = [ "New", "Byhand" ]
queue_info = {
"New": { "is": is_new, "process": acknowledge_new },
"Byhand" : { "is": is_byhand, "process": do_byhand },
+ "Unembargo" : { "is": is_unembargo, "process": queue_unembargo },
+ "Embargo" : { "is": is_embargo, "process": queue_embargo },
}
+ queues = [ "New", "Byhand" ]
+ if Cnf.FindB("Dinstall::SecurityQueueHandling"):
+ queues += [ "Unembargo", "Embargo" ]
(prompt, answer) = ("", "XXX")
if Options["No-Action"] or Options["Automatic"]:
Katie.do_reject(0, reject_message);
elif answer == 'A':
accept(summary, short_summary);
+ remove_from_unchecked()
elif answer == queuekey:
queue_info[queue]["process"](summary)
+ remove_from_unchecked()
elif answer == 'Q':
sys.exit(0)
+def remove_from_unchecked():
+ os.chdir (pkg.directory);
+ for file in files.keys():
+ os.unlink(file);
+ os.unlink(pkg.changes_file);
+
################################################################################
def accept (summary, short_summary):
Katie.accept(summary, short_summary);
Katie.check_override();
- # Finally, remove the originals from the unchecked directory
- os.chdir (pkg.directory);
- for file in files.keys():
- os.unlink(file);
- os.unlink(pkg.changes_file);
+################################################################################
+
+def move_to_dir (dest, perms=0660, changesperms=0664):
+ utils.move (pkg.changes_file, dest, perms=changesperms);
+ for file in file_keys:
+ utils.move (file, dest, perms=perms);
+
+################################################################################
+
+def is_unembargo ():
+ if os.getcwd() == Cnf["Dir::Queue::Disembargo"]:
+ if changes["architecture"].has_key("source"):
+ if Options["No-Action"]: return 1
+
+ projectB.query(
+ "INSERT INTO disembargo (package, version) VALUES ('%s', '%s')" %
+ (changes["package"], changes["version"]))
+
+ q = projectB.query(
+ "SELECT package FROM disembargo WHERE package = '%s' AND version = '%s'" %
+ (changes["package"], changes["version"]))
+ ql = q.getresult()
+ if ql:
+ return 1
+ return 0
+
+def queue_unembargo (summary):
+ print "Moving to UNEMBARGOED holding area."
+ Logger.log(["Moving to unembargoed", pkg.changes_file]);
+
+ Katie.dump_vars(Cnf["Dir::Queue::Unembargoed"]);
+
+ file_keys = files.keys();
+
+ move_to_dir(Cnf["Dir::Queue::Unembargoed"])
+ Katie.queue_build("unembargoed", Cnf["Dir::Queue::Unembargoed"])
+
+ # Check for override disparities
+ Katie.Subst["__SUMMARY__"] = summary;
+ Katie.check_override();
+
+################################################################################
+
+def is_embargo ():
+ return 0
+
+def queue_embargo (summary):
+ print "Moving to EMBARGOED holding area."
+ Logger.log(["Moving to embargoed", pkg.changes_file]);
+
+ Katie.dump_vars(Cnf["Dir::Queue::Embargoed"]);
+
+ file_keys = files.keys();
+
+ move_to_dir(Cnf["Dir::Queue::Embargoed"])
+ Katie.queue_build("embargoed", Cnf["Dir::Queue::Embargoed"])
+
+ # Check for override disparities
+ Katie.Subst["__SUMMARY__"] = summary;
+ Katie.check_override();
################################################################################
file_keys = files.keys();
- # Move all the files into the byhand directory
- utils.move (pkg.changes_file, Cnf["Dir::Queue::Byhand"]);
- for file in file_keys:
- utils.move (file, Cnf["Dir::Queue::Byhand"], perms=0660);
+ move_to_dir(Cnf["Dir::Queue::Byhand"])
# Check for override disparities
Katie.Subst["__SUMMARY__"] = summary;
Katie.check_override();
- # Finally remove the originals.
- os.chdir (pkg.directory);
- for file in file_keys:
- os.unlink(file);
- os.unlink(pkg.changes_file);
-
################################################################################
def is_new ():
file_keys = files.keys();
- # Move all the files into the 'new' directory
- utils.move (pkg.changes_file, Cnf["Dir::Queue::New"]);
- for file in file_keys:
- utils.move (file, Cnf["Dir::Queue::New"], perms=0660);
+ move_to_dir(Cnf["Dir::Queue::New"])
if not Options["No-Mail"]:
print "Sending new ack.";
new_ack_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/jennifer.new");
utils.send_mail(new_ack_message);
- # Finally remove the originals.
- os.chdir (pkg.directory);
- for file in file_keys:
- os.unlink(file);
- os.unlink(pkg.changes_file);
-
################################################################################
# reprocess is necessary for the case of foo_1.2-1 and foo_1.2-2 in
# Utility functions for katie
# Copyright (C) 2001, 2002, 2003, 2004, 2005 James Troup <james@nocrew.org>
-# $Id: katie.py,v 1.56 2005-11-25 06:59:45 ajt Exp $
+# $Id: katie.py,v 1.57 2005-12-05 03:45:12 ajt Exp $
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
changes_file[:-8]+".debinfo");
os.rename(temp_filename, filename);
- ## Special support to enable clean auto-building of accepted packages
+ self.queue_build("accepted", Cnf["Dir::Queue::Accepted"])
+
+ ###########################################################################
+
+ def queue_build (self, queue, path):
+ ## Special support to enable clean auto-building of queued packages
+ queue_id = get_or_set_queue_id(queue)
+
self.projectB.query("BEGIN WORK");
for suite in changes["distribution"].keys():
if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"):
if Cnf.FindB("Dinstall::SecurityQueueBuild"):
dest_dir = os.path.join(dest_dir, suite);
for file in file_keys:
- src = os.path.join(Cnf["Dir::Queue::Accepted"], file);
+ src = os.path.join(path, file);
dest = os.path.join(dest_dir, file);
if Cnf.FindB("Dinstall::SecurityQueueBuild"):
# Copy it since the original won't be readable by www-data
# Create a symlink to it
os.symlink(src, dest);
# Add it to the list of packages for later processing by apt-ftparchive
- self.projectB.query("INSERT INTO queue_build (suite, queue, filename, in_queue) VALUES (%s, 0, '%s', 't')" % (suite_id, dest));
+ self.projectB.query("INSERT INTO queue_build (suite, queue, filename, in_queue) VALUES (%s, queue_id, '%s', 't')" % (suite_id, dest));
# If the .orig.tar.gz is in the pool, create a symlink to
# it (if one doesn't already exist)
if self.pkg.orig_tar_id:
src = os.path.join(ql[0][0], ql[0][1]);
os.symlink(src, dest);
# Add it to the list of packages for later processing by apt-ftparchive
- self.projectB.query("INSERT INTO queue_build (suite, queue, filename, in_queue) VALUES (%s, 0, '%s', 't')" % (suite_id, dest));
+ self.projectB.query("INSERT INTO queue_build (suite, queue, filename, in_queue) VALUES (%s, queue_id, '%s', 't')" % (suite_id, dest));
# if it does, update things to ensure it's not removed prematurely
else:
self.projectB.query("UPDATE queue_build SET in_queue = 't', last_used = NULL WHERE filename = '%s' AND suite = %s" % (dest, suite_id));