]> git.decadent.org.uk Git - dak.git/commitdiff
Also close wnpp bugs on package removal
authorAlexander Reichle-Schmehl <alexander@schmehl.info>
Tue, 28 Sep 2010 11:52:41 +0000 (11:52 +0000)
committerAlexander Reichle-Schmehl <alexander@schmehl.info>
Tue, 28 Sep 2010 11:52:41 +0000 (11:52 +0000)
dak/rm.py
daklib/utils.py

index db43de190dc82f02e59e7c185d1cfdf85fc3df5c..1190d023f737a022f1d26f381d503987731dd993 100755 (executable)
--- 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()
index c9b54d078db3bc6b85e05e214823eb8b54f2aa74..27b068e1c49d15ec9426da65f13ac49054762f2b 100755 (executable)
@@ -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
+