X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=katie.py;h=f501015260b7911af6991b82a3db1d341451cda6;hb=72854d117ff4a60b56f7d1b3efebad03ed22675a;hp=23e1d6b6644ae83d93601a30714bd4af5dd39e64;hpb=cbbe871526ba43459683e1e731366dc2a0710e37;p=dak.git diff --git a/katie.py b/katie.py index 23e1d6b6..f5010152 100644 --- a/katie.py +++ b/katie.py @@ -2,7 +2,7 @@ # Utility functions for katie # Copyright (C) 2001, 2002, 2003 James Troup -# $Id: katie.py,v 1.37 2003-08-09 02:49:35 rdonald Exp $ +# $Id: katie.py,v 1.43 2003-11-07 01:48:42 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 @@ -263,7 +263,7 @@ class Katie: if files[file]["type"] == "deb": summary += apt_pkg.ParseSection(apt_inst.debExtractControl(utils.open_file(file)))["Description"] + '\n'; else: - files[file]["pool name"] = utils.poolify (changes["source"], files[file]["component"]) + files[file]["pool name"] = utils.poolify (changes.get("source",""), files[file]["component"]) destination = self.Cnf["Dir::PoolRoot"] + files[file]["pool name"] + file summary += file + "\n to " + destination + "\n" @@ -325,8 +325,8 @@ distribution."""; Subst["__STABLE_WARNING__"] = ""; mail_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/jennifer.bug-close"); utils.send_mail (mail_message); - if action: - self.Logger.log(["closing bugs"]+bugs); + if action: + self.Logger.log(["closing bugs"]+bugs); else: # NMU summary += "Setting bugs to severity fixed: "; @@ -469,7 +469,9 @@ distribution."""; return; summary = ""; - for file in files.keys(): + file_keys = files.keys(); + file_keys.sort(); + for file in file_keys: if not files[file].has_key("new") and files[file]["type"] == "deb": section = files[file]["section"]; override_section = files[file]["override section"]; @@ -570,7 +572,7 @@ distribution."""; pkg = self.pkg; reason_filename = pkg.changes_file[:-8] + ".reason"; - reject_filename = Cnf["Dir::Queue::Reject"] + '/' + reason_filename; + reason_filename = Cnf["Dir::Queue::Reject"] + '/' + reason_filename; # Move all the files into the reject directory reject_files = pkg.files.keys() + [pkg.changes_file]; @@ -578,16 +580,15 @@ distribution."""; # If we fail here someone is probably trying to exploit the race # so let's just raise an exception ... - if os.path.exists(reject_filename): - os.unlink(reject_filename); - fd = os.open(reject_filename, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0644); + if os.path.exists(reason_filename): + os.unlink(reason_filename); + reason_file = os.open(reason_filename, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0644); if not manual: Subst["__REJECTOR_ADDRESS__"] = Cnf["Dinstall::MyEmailAddress"]; Subst["__MANUAL_REJECT_MESSAGE__"] = ""; Subst["__CC__"] = "X-Katie-Rejection: automatic (moo)"; - os.write(fd, reject_message); - os.close(fd); + os.write(reason_file, reject_message); reject_mail_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/katie.rejected"); else: # Build up the rejection email @@ -597,10 +598,10 @@ distribution."""; Subst["__MANUAL_REJECT_MESSAGE__"] = reject_message; Subst["__CC__"] = "Cc: " + Cnf["Dinstall::MyEmailAddress"]; reject_mail_message = utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/katie.rejected"); - # Write the rejection email out as the .reason file - os.write(fd, reject_mail_message); - os.close(fd); + os.write(reason_file, reject_mail_message); + + os.close(reason_file); # Send the rejection mail if appropriate if not Cnf["Dinstall::Options::No-Mail"]: @@ -625,8 +626,20 @@ distribution."""; que = "SELECT s.version FROM source s WHERE s.source = '%s'" % \ (package) else: - suite_id = db_access.get_suite_id(suite); - que = "SELECT s.version FROM source s JOIN src_associations sa ON (s.id = sa.source) WHERE sa.suite = %d AND s.source = '%s'" % (suite_id, package) + # source must exist in suite X, or in some other suite that's + # mapped to X, recursively... silent-maps are counted too, + # unreleased-maps aren't. + maps = self.Cnf.ValueList("SuiteMappings")[:] + maps.reverse() + maps = [ m.split() for m in maps ] + maps = [ (x[1], x[2]) for x in maps + if x[0] == "map" or x[0] == "silent-map" ] + s = [suite] + for x in maps: + if x[1] in s and x[0] not in s: + s.append(x[0]) + + que = "SELECT s.version FROM source s JOIN src_associations sa ON (s.id = sa.source) JOIN suite su ON (sa.suite = su.id) WHERE s.source = '%s' AND (%s)" % (package, string.join(["su.suite_name = '%s'" % a for a in s], " OR ")); q = self.projectB.query(que) # Reduce the query results to a list of version numbers @@ -752,7 +765,7 @@ SELECT b.id FROM binaries b, architecture a files[file]["version"], files[file]["architecture"])) if q.getresult(): - self.reject("can not overwrite existing copy of '%s' already in the archive." % (file)); + self.reject("%s: can not overwrite existing copy already in the archive." % (file)); return self.reject_message;