X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Frm.py;h=ada3c02b284cbaad789924d90e38efbb2063e753;hb=6dd485d301a90bf3b50c6364d67eea652232979d;hp=f63b2ca6b80e0f87afcc7d1d4aeb394623ef8d1b;hpb=ecd1f4b98366b37fa0b06eb2256ce393e71e7c87;p=dak.git diff --git a/dak/rm.py b/dak/rm.py index f63b2ca6..ada3c02b 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -67,6 +67,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 @@ -119,6 +120,12 @@ def reverse_depends_check(removals, suites, arches=None): (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): utils.fubar("Gunzip invocation failed!\n%s\n" % (output), result) + # Also check for udebs + filename = "%s/dists/%s/%s/debian-installer/binary-%s/Packages.gz" % (cnf["Dir::Root"], suites[0], component, architecture) + if os.path.exists(filename): + (result, output) = commands.getstatusoutput("gunzip -c %s >> %s" % (filename, temp_filename)) + if (result != 0): + utils.fubar("Gunzip invocation failed!\n%s\n" % (output), result) packages = utils.open_file(temp_filename) Packages = apt_pkg.ParseTagFile(packages) while Packages.Step(): @@ -263,6 +270,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"), @@ -299,6 +307,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 @@ -602,6 +618,38 @@ def main (): mail_message = utils.TemplateSubst(Subst,cnf["Dir::Templates"]+"/rm.bug-close") utils.send_mail(mail_message) + # close associated bug reports + if Options["Do-Close"]: + 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 + 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) + logfile.write("=========================================================================\n") logfile.close()