From 5537d969662dd89432dbede1e985d17a7ac632ef Mon Sep 17 00:00:00 2001 From: Alexander Reichle-Schmehl Date: Tue, 28 Sep 2010 11:52:41 +0000 Subject: [PATCH] Also close wnpp bugs on package removal --- dak/rm.py | 31 +++++++++++++++++++++++-------- daklib/utils.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/dak/rm.py b/dak/rm.py index db43de19..1190d023 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -623,11 +623,10 @@ def main (): utils.send_mail(mail_message) # close associated bug reports - # FIXME: We should also close possible WNPP bugs for that package, but - # currently there's no sane way to determine them if Options["Do-Close"]: Subst_close_other = Subst_common bcc = [] + wnpp = utils.parse_wnpp_bug_file() if len(versions) == 1: Subst_close_other["__VERSION__"] = versions[0] else: @@ -639,21 +638,37 @@ def main (): # at this point, I just assume, that the first closed bug gives # some useful information on why the package got removed Subst_close_other["__BUG_NUMBER__"] = utils.split_args(Options["Done"])[0] - if len(sources) > 1: + if len(sources) == 1: + source_pkg = source.split("_", 1)[0] + else: utils.fubar("Closing bugs for multiple source pakcages is not supported. Do it yourself.") Subst_close_other["__BUG_NUMBER_ALSO__"] = "" - Subst_close_other["__SOURCE__"] = source.split("_", 1)[0] - logfile.write("Also closing bugs: ") - logfile822.write("Also-Bugs: ") + Subst_close_other["__SOURCE__"] = source_pkg + logfile.write("Also closing bug(s):") + logfile822.write("Also-Bugs:") for bug in bts.get_bugs('src', source.split("_", 1)[0], 'status', 'open'): Subst_close_other["__BUG_NUMBER_ALSO__"] += str(bug) + "-done@" + cnf["Dinstall::BugServer"] + "," logfile.write(" " + str(bug)) logfile822.write(" " + str(bug)) + logfile.write("\n") + logfile822.write("\n") + if source_pkg in wnpp.keys(): + logfile.write("Also closing WNPP bug(s):") + logfile822.write("Also-WNPP:") + for bug in wnpp[source_pkg]: + # the wnpp-rm file we parse also contains our removal + # bugs, filtering that out + if bug != Subst_close_other["__BUG_NUMBER__"]: + Subst_close_other["__BUG_NUMBER_ALSO__"] += str(bug) + "-done@" + cnf["Dinstall::BugServer"] + "," + logfile.write(" " + str(bug)) + logfile822.write(" " + str(bug)) + logfile.write("\n") + logfile822.write("\n") + mail_message = utils.TemplateSubst(Subst_close_other,cnf["Dir::Templates"]+"/rm.bug-close-related") if Subst_close_other["__BUG_NUMBER_ALSO__"]: utils.send_mail(mail_message) - logfile.write("\n") - logfile822.write("\n") + logfile.write("=========================================================================\n") logfile.close() diff --git a/daklib/utils.py b/daklib/utils.py index c9b54d07..27b068e1 100755 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -1536,3 +1536,32 @@ if not os.getenv("DAK_TEST"): if which_conf_file() != default_config: apt_pkg.ReadConfigFileISC(Cnf,which_conf_file()) + +################################################################################ + +def parse_wnpp_bug_file(file = "/home/tolimar/wnpp-bugs"): + """ + Parses the wnpp bug list available at http://qa.debian.org/data/bts/wnpp_rm + Well, actually it parsed a local copy, but let's document the source + somewhere ;) + + returns a dict associating source package name with a list of open wnpp + bugs (Yes, there might be more than one) + """ + lines = open(file).readlines() + wnpp = {} + + for line in lines: + splited_line = line.split(": ", 1) + if len(splited_line) > 1: + wnpp[splited_line[0]] = splited_line[1].split("|") + + for source in wnpp.keys(): + bugs = [] + for wnpp_bug in wnpp[source]: + bug_no = re.search("(\d)+", wnpp_bug).group() + if bug_no: + bugs.append(bug_no) + wnpp[source] = bugs + return wnpp + -- 2.39.2