# Utility functions for katie
# Copyright (C) 2001, 2002, 2003 James Troup <james@nocrew.org>
-# $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
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"
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: ";
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"];
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];
# 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
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 <foo>.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"]:
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
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;