X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=katie.py;h=8c31a2dd556a714c138515eb23d584593887be1b;hb=b981d2124dad87cd181b5218cc0cf7764298b896;hp=0ab74bdf399f1fe1dcf2112066680f47f6fa9d18;hpb=44f6878bd9cedddc46ddfabfc1e8660de1f32445;p=dak.git diff --git a/katie.py b/katie.py index 0ab74bdf..8c31a2dd 100644 --- a/katie.py +++ b/katie.py @@ -2,7 +2,7 @@ # Utility functions for katie # Copyright (C) 2001, 2002 James Troup -# $Id: katie.py,v 1.21 2002-05-18 23:55:07 troup Exp $ +# $Id: katie.py,v 1.25 2002-07-12 14:59:08 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 @@ -143,7 +143,16 @@ class Katie: exec "%s = self.pkg.%s;" % (i,i); dump_filename = os.path.join(dest_dir,self.pkg.changes_file[:-8] + ".katie"); dump_file = utils.open_file(dump_filename, 'w'); - os.chmod(dump_filename, 0660); + try: + os.chmod(dump_filename, 0660); + except OSError, e: + if errno.errorcode[e.errno] == 'EPERM': + perms = stat.S_IMODE(os.stat(dump_filename)[stat.ST_MODE]); + if perms & stat.S_IROTH: + utils.fubar("%s is world readable and chmod failed." % (dump_filename)); + else: + raise; + p = cPickle.Pickler(dump_file, 1); for i in [ "d_changes", "d_dsc", "d_files", "d_dsc_files" ]: exec "%s = {}" % i; @@ -154,7 +163,7 @@ class Katie: "md5sum", "component", "location id", "source package", "source version", "maintainer", "dbtype", "files id", "new", "section", "priority", "othercomponents", - "pool name" ]: + "pool name", "original component" ]: if files[file].has_key(i): d_files[file][i] = files[file][i]; ## changes @@ -347,7 +356,7 @@ distribution."""; mail_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/jennifer.announce"); utils.send_mail (mail_message, ""); - if Cnf.get("Dinstall::CloseBugs"): + if Cnf.FindB("Dinstall::CloseBugs"): summary = self.close_bugs(summary, action); return summary; @@ -382,16 +391,25 @@ distribution."""; self.announce(short_summary, 1) # Special support to enable clean auto-building of accepted packages - if Cnf.FindB("Dinstall::SpecialAcceptedAutoBuild") and \ - self.pkg.changes["distribution"].has_key("unstable"): - self.projectB.query("BEGIN WORK"); + self.projectB.query("BEGIN WORK"); + for suite in self.pkg.changes["distribution"].keys(): + if suite not in Cnf.ValueList("Dinstall::AcceptedAutoBuildSuites"): + continue; + suite_id = db_access.get_suite_id(suite); + dest_dir = Cnf["Dir::AcceptedAutoBuild"]; + if Cnf.FindB("Dinstall::SecurityAcceptedAutoBuild"): + dest_dir = os.path.join(dest_dir, suite); for file in file_keys: src = os.path.join(Cnf["Dir::Queue::Accepted"], file); - dest = os.path.join(Cnf["Dir::AcceptedAutoBuild"], file); - # Create a symlink to it - os.symlink(src, dest); + dest = os.path.join(dest_dir, file); + if Cnf.FindB("Dinstall::SecurityAcceptedAutoBuild"): + # Copy it since the original won't be readable by www-data + utils.copy(src, dest); + else: + # 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)); + self.projectB.query("INSERT INTO accepted_autobuild (suite, filename, in_accepted) VALUES (%s, '%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: @@ -399,7 +417,7 @@ distribution."""; 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::AcceptedAutoBuild"],filename); + dest = os.path.join(dest_dir, filename); # If it doesn't exist, create a symlink if not os.path.exists(dest): # Find the .orig.tar.gz in the pool @@ -410,9 +428,12 @@ distribution."""; 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("INSERT INTO accepted_autobuild (suite, filename, in_accepted) VALUES (%s, '%s', 't')" % (suite_id, dest)); + # if it does, update things to ensure it's not removed prematurely + else: + self.projectB.query("UPDATE accepted_autobuild SET in_accepted = 't', last_used = NULL WHERE filename = '%s' AND suite = %s" % (dest, suite_id)); - self.projectB.query("COMMIT WORK"); + self.projectB.query("COMMIT WORK"); ###########################################################################