From: Joerg Jaspert Date: Sun, 19 Sep 2010 09:38:19 +0000 (+0200) Subject: Merge remote branch 'tolimar/rm-close-bugs' into merge X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=7a966c081f8e4b83d1cf4dc4b8cb7ebb0f06dd30;hp=749f35dc8ab294940aab5ef9e837c261c1011f02;p=dak.git Merge remote branch 'tolimar/rm-close-bugs' into merge * tolimar/rm-close-bugs: Template was edited by mistake, sorry Set the version subst variable for the removal of associated bugs General code cleanup and fixes of the -D stuff Add the template import the debianbts modul, so we actually have the soap modules available Actualy close bugs associated to removed packaged on request Add an option do close bugs on package removal Signed-off-by: Joerg Jaspert --- diff --git a/dak/rm.py b/dak/rm.py index 4c4100bf..c0f6810d 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -2,6 +2,7 @@ """ General purpose package removal tool for ftpmaster """ # Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006 James Troup +# Copyright (C) 2010 Alexander Reichle-Schmehl # 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 @@ -51,6 +52,7 @@ from daklib.dbconn import * from daklib import utils from daklib.dak_exceptions import * from daklib.regexes import re_strip_source_version, re_build_dep_arch +import debianbts as bts ################################################################################ @@ -67,6 +69,7 @@ Remove PACKAGE(s) from suite(s). -c, --component=COMPONENT act on this component -C, --carbon-copy=EMAIL send a CC of removal message to EMAIL -d, --done=BUG# send removal message as closure to bug# + -D, --do-close also close all bugs associated to that package -h, --help show this help and exit -m, --reason=MSG reason for removal -n, --no-action don't do anything @@ -269,6 +272,7 @@ def main (): ('c',"component", "Rm::Options::Component", "HasArg"), ('C',"carbon-copy", "Rm::Options::Carbon-Copy", "HasArg"), # Bugs to Cc ('d',"done","Rm::Options::Done", "HasArg"), # Bugs fixed + ('D',"do-close","Rm::Options::Do-Close"), ('R',"rdep-check", "Rm::Options::Rdep-Check"), ('m',"reason", "Rm::Options::Reason", "HasArg"), # Hysterical raisins; -m is old-dinstall option for rejection reason ('n',"no-action","Rm::Options::No-Action"), @@ -305,6 +309,14 @@ def main (): if Options["Architecture"] and not Options["Partial"]: utils.warn("-a/--architecture implies -p/--partial.") Options["Partial"] = "true" + if Options["Do-Close"] and not Options["Done"]: + utils.fubar("No.") + if Options["Do-Close"] and Options["Binary-Only"]: + utils.fubar("No.") + if Options["Do-Close"] and Options["Source-Only"]: + utils.fubar("No.") + if Options["Do-Close"] and Options["Suite"] != 'unstable': + utils.fubar("No.") # Force the admin to tell someone if we're not doing a 'dak # cruft-report' inspired removal (or closing a bug, which counts @@ -467,6 +479,7 @@ def main (): summary = "" removals = d.keys() removals.sort() + versions = [] for package in removals: versions = d[package].keys() versions.sort(apt_pkg.VersionCompare) @@ -510,7 +523,8 @@ def main (): logfile.write("Closed bugs: %s\n" % (Options["Done"])) logfile.write("\n------------------- Reason -------------------\n%s\n" % (Options["Reason"])) logfile.write("----------------------------------------------\n") - logfile.flush() + logfile.write("=========================================================================\n") + logfile.close() # Do the same in rfc822 format logfile822 = utils.open_file(cnf["Rm::LogFile822"], 'a') @@ -540,7 +554,6 @@ def main (): if Options["Done"]: logfile822.write("Bug: %s\n" % Options["Done"]) logfile822.write("\n") - logfile822.flush() logfile822.close() dsc_type_id = get_override_type('dsc', session).overridetype_id @@ -574,31 +587,32 @@ def main (): session.commit() print "done." + Subst = {} + Subst["__RM_ADDRESS__"] = cnf["Rm::MyEmailAddress"] + Subst["__BUG_SERVER__"] = cnf["Dinstall::BugServer"] + bcc = [] + if cnf.Find("Dinstall::Bcc") != "": + bcc.append(cnf["Dinstall::Bcc"]) + if cnf.Find("Rm::Bcc") != "": + bcc.append(cnf["Rm::Bcc"]) + if bcc: + Subst["__BCC__"] = "Bcc: " + ", ".join(bcc) + else: + Subst["__BCC__"] = "X-Filler: 42" + Subst["__CC__"] = "X-DAK: dak rm" + if carbon_copy: + Subst["__CC__"] += "\nCc: " + ", ".join(carbon_copy) + Subst["__SUITE_LIST__"] = suites_list + Subst["__SUBJECT__"] = "Removed package(s) from %s" % (suites_list) + Subst["__ADMIN_ADDRESS__"] = cnf["Dinstall::MyAdminAddress"] + Subst["__DISTRO__"] = cnf["Dinstall::MyDistribution"] + Subst["__WHOAMI__"] = whoami + # Send the bug closing messages if Options["Done"]: - Subst = {} - Subst["__RM_ADDRESS__"] = cnf["Rm::MyEmailAddress"] - Subst["__BUG_SERVER__"] = cnf["Dinstall::BugServer"] - bcc = [] - if cnf.Find("Dinstall::Bcc") != "": - bcc.append(cnf["Dinstall::Bcc"]) - if cnf.Find("Rm::Bcc") != "": - bcc.append(cnf["Rm::Bcc"]) - if bcc: - Subst["__BCC__"] = "Bcc: " + ", ".join(bcc) - else: - Subst["__BCC__"] = "X-Filler: 42" - Subst["__CC__"] = "X-DAK: dak rm" - if carbon_copy: - Subst["__CC__"] += "\nCc: " + ", ".join(carbon_copy) - Subst["__SUITE_LIST__"] = suites_list summarymail = "%s\n------------------- Reason -------------------\n%s\n" % (summary, Options["Reason"]) summarymail += "----------------------------------------------\n" Subst["__SUMMARY__"] = summarymail - Subst["__SUBJECT__"] = "Removed package(s) from %s" % (suites_list) - Subst["__ADMIN_ADDRESS__"] = cnf["Dinstall::MyAdminAddress"] - Subst["__DISTRO__"] = cnf["Dinstall::MyDistribution"] - Subst["__WHOAMI__"] = whoami whereami = utils.where_am_i() Archive = cnf.SubTree("Archive::%s" % (whereami)) Subst["__MASTER_ARCHIVE__"] = Archive["OriginServer"] @@ -608,8 +622,21 @@ def main (): mail_message = utils.TemplateSubst(Subst,cnf["Dir::Templates"]+"/rm.bug-close") utils.send_mail(mail_message) - logfile.write("=========================================================================\n") - logfile.close() + # close associated bug reports + if Options["Do-Close"]: + if len(versions) == 1: + Subst["__VERSION__"] = versions[0] + else: + utils.fubar("Closing bugs with multiple package versions is not supported. Do it yourself.") + whereami = utils.where_am_i() + Archive = cnf.SubTree("Archive::%s" % (whereami)) + # at this point, I just assume, that the first closed bug gives + # some usefull information on why the package got removed + Subst["__BUG_NUMBER__"] = utils.split_args(Options["Done"])[0] + for bug in bts.get_bugs('src', package, 'status', 'open'): + Subst["__BUG_NUMBER_ALSO__"] += bug + "-done@" + cnf["Dinstall::BugServer"] + "," + mail_message = utils.TemplateSubst(Subst,cnf["Dir::Templates"]+"/rm.bug-close-related") + utils.send_mail(mail_message) ####################################################################################### diff --git a/templates/rm.bug-close-related b/templates/rm.bug-close-related new file mode 100644 index 00000000..3806492d --- /dev/null +++ b/templates/rm.bug-close-related @@ -0,0 +1,27 @@ +From: __RM_ADDRESS__ +To: __BUG_NUMBER_ALSO__ +__CC__ +__BCC__ +X-Debian: DAK +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit +Subject: Bug#__BUG_NUMBER__: __SUBJECT__ + +Version: __VERSION__+rm + +Dear submitter, + +as the package __SOURCE__ has just been removed from the Debian archive +__SUITE_LIST__ we hereby close the assiciated bug reports. We are sorry +that we couldn't deal with your issue properly. + +For details on the removal, please see http://__BUG_SERVER__/__BUG_NUMBER__ + +This message was generated automatically; if you believe that there is +a problem with it please contact the archive administrators by mailing +__ADMIN_ADDRESS__. + +__DISTRO__ distribution maintenance software +pp. +__WHOAMI__ (the ftpmaster behind the curtain)