# Installs Debian packages
# Copyright (C) 2000, 2001 James Troup <james@nocrew.org>
-# $Id: katie,v 1.78 2002-04-20 13:13:32 troup Exp $
+# $Id: katie,v 1.79 2002-04-24 01:56:24 troup 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
-katie_version = "$Revision: 1.78 $";
+katie_version = "$Revision: 1.79 $";
Cnf = None;
Options = None;
if changes["architecture"].has_key("source"):
Urgency_Logger.log(dsc["source"], dsc["version"], changes["urgency"]);
- ## FIXME: this should go away to some Debian specific file
# Undo the work done in katie.py(accept) to help auto-building
- # from accepted
- if changes["distribution"].has_key("unstable"):
+ # from accepted.
+ if Cnf.get("Dinstall::SpecialAcceptedAutoBuild") and \
+ changes["distribution"].has_key("unstable"):
+ now_date = time.strftime("%Y-%m-%d %H:%M", time.localtime(time.time()));
projectB.query("BEGIN WORK");
- # Remove it from the list of packages for later processing by apt-ftparchive
for file in files.keys():
- if files[file]["type"] == "dsc" or files[file]["type"] == "deb":
- filename = os.path.join(Cnf["Dir::QueueAcceptedDir"], file);
- projectB.query("DELETE FROM unstable_accepted WHERE filename = '%s'" % (filename));
- # Remove any .orig.tar.gz symlink
+ dest = os.path.join(Cnf["Dir::AcceptedAutoBuild"], file);
+ # Remove it from the list of packages for later processing by apt-ftparchive
+ projectB.query("UPDATE unstable_accepted SET in_accepted = 'f', last_used = '%s' WHERE filename = '%s'" % (now_date, dest));
+ # Update the symlink to point to the new location in the pool
+ pool_location = utils.poolify (changes["source"], files[file]["component"]);
+ src = os.path.join(Cnf["Dir::PoolDir"], pool_location, os.path.basename(file));
+ os.unlink(dest);
+ os.symlink(src, dest);
+ # Update last_used on any non-upload .orig.tar.gz symlink
if orig_tar_id:
# Determine the .orig.tar.gz file name
for dsc_file in dsc_files.keys():
if dsc_file[-12:] == ".orig.tar.gz":
- orig_tar_gz = os.path.join(Cnf["Dir::QueueAcceptedDir"],dsc_file);
- # Remove it if it's a symlink
- if os.path.exists(orig_tar_gz) and os.path.islink(orig_tar_gz):
- os.unlink(orig_tar_gz);
+ orig_tar_gz = os.path.join(Cnf["Dir::AcceptedAutoBuild"], dsc_file);
+ # Remove it from the list of packages for later processing by apt-ftparchive
+ projectB.query("UPDATE unstable_accepted SET in_accepted = 'f', last_used = '%s' WHERE filename = '%s'" % (now_date, orig_tar_gz));
projectB.query("COMMIT WORK");
install_count = install_count + 1;
# Utility functions for katie
# Copyright (C) 2001 James Troup <james@nocrew.org>
-# $Id: katie.py,v 1.15 2002-04-21 15:38:29 troup Exp $
+# $Id: katie.py,v 1.16 2002-04-24 01:56:24 troup 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
utils.send_mail(mail_message, "")
self.announce(short_summary, 1)
- ## FIXME: this should go away to some Debian specific file
- # If we're accepting something for unstable do extra work to
- # make it auto-buildable from accepted
- if self.pkg.changes["distribution"].has_key("unstable"):
+ # Special support to enable clean auto-building of accepted packages
+ if Cnf.get("Dinstall::SpecialAcceptedAutoBuild") and \
+ self.pkg.changes["distribution"].has_key("unstable"):
self.projectB.query("BEGIN WORK");
- # Add it to the list of packages for later processing by apt-ftparchive
for file in file_keys:
- if files[file]["type"] == "dsc" or files[file]["type"] == "deb":
- filename = os.path.join(Cnf["Dir::QueueAcceptedDir"], file);
- self.projectB.query("INSERT INTO unstable_accepted (filename) VALUES ('%s')" % (filename));
- # If the .orig.tar.gz is in the pool, create a symlink (if
- # one doesn't already exist)
+ src = os.path.join(Cnf["Dir::QueueAcceptedDir"], file);
+ dest = os.path.join(Cnf["Dir::AcceptedAutoBuild"], file);
+ # 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 unstable_accepted (filename, in_accepted) VALUES ('%s', 't')" % (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:
# Determine the .orig.tar.gz file name
for dsc_file in self.pkg.dsc_files.keys():
if dsc_file[-12:] == ".orig.tar.gz":
filename = dsc_file;
- dest = os.path.join(Cnf["Dir::QueueAcceptedDir"],filename);
+ dest = os.path.join(Cnf["Dir::AcceptedAutoBuild"],filename);
# If it doesn't exist, create a symlink
if not os.path.exists(dest):
# Find the .orig.tar.gz in the pool
utils.fubar("[INTERNAL ERROR] Couldn't find id %s in files table." % (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 unstable_accepted (filename, in_accepted) VALUES ('%s', 't')" % (dest));
+
self.projectB.query("COMMIT WORK");
###########################################################################
# safely overwrite it.
utils.move(file, dest_file, 1, perms=0660);
-
###########################################################################
def do_reject (self, manual = 0, reject_message = ""):
# rhona, cleans up unassociated binary and source packages
# Copyright (C) 2000, 2001 James Troup <james@nocrew.org>
-# $Id: rhona,v 1.21 2002-04-22 11:06:49 troup Exp $
+# $Id: rhona,v 1.22 2002-04-24 01:56:24 troup 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
################################################################################
+def clean_accepted_autobuild():
+ global now_date;
+
+ if not Cnf.get("Dinstall::SpecialAcceptedAutoBuild") or Options["No-Action"]:
+ return;
+
+ print "Cleaning out accepted autobuild symlinks..."
+
+ our_delete_date = time.strftime("%Y-%m-%d %H:%M", time.localtime(time.time()-int(Cnf["Rhona::AcceptedAutoBuildStayOfExecution"])));
+ count = 0;
+
+ q = projectB.query("SELECT filename FROM unstable_accepted WHERE last_used <= '%s'" % (our_delete_date));
+ for i in q.getresult():
+ filename = i[0];
+ if not os.path.exists(filename):
+ utils.fubar("%s (from unstable_accepted) doesn't exist." % (filename));
+ if not os.path.islink(filename):
+ utils.fubar("%s (from unstable_accepted) should be a symlink but isn't." % (filename));
+ os.unlink(filename);
+ count = count + 1;
+ projectB.query("DELETE FROM unstable_accepted WHERE last_used <= '%s'" % (our_delete_date));
+
+ if count > 0:
+ sys.stderr.write("Cleaned %d accepted-autobuild symlinks.\n" % (count));
+
+################################################################################
+
def main():
global Cnf, Options, projectB, delete_date, now_date;
clean();
clean_maintainers();
clean_fingerprints();
+ clean_accepted_autobuild();
################################################################################