]> git.decadent.org.uk Git - dak.git/commitdiff
Add functions to colourize RC bug fixing packages differently
authorKumar Appaiah <a.kumar@alumni.iitm.ac.in>
Sat, 25 Sep 2010 22:04:10 +0000 (17:04 -0500)
committerJoerg Jaspert <joerg@debian.org>
Sat, 22 Jan 2011 22:16:03 +0000 (23:16 +0100)
This commit adds some functions to query the BTS Soap interface to
determine if the package closes an RC bug or not. If it does close an
RC bug, it allows for differently colourizing the package line. It
adds a variable to indicate if a package fixes an RC bug or not, and
already allows for colourization of the HTML output; the new entry can
be used to colourize in other output formats as well.

Signed-off-by: Kumar Appaiah <a.kumar@alumni.iitm.ac.in>
dak/queue_report.py

index e2d8578b8865a902ff32a308b52af97743b050c1..9c349892cea4f68c8e82d11ace13d222c903027c 100755 (executable)
@@ -43,6 +43,7 @@ from daklib.queue import Upload
 from daklib.dbconn import DBConn, has_new_comment, DBChange, DBSource, get_uid_from_fingerprint
 from daklib.textutils import fix_maintainer
 from daklib.dak_exceptions import *
+import debianbts
 
 Cnf = None
 direction = []
@@ -264,7 +265,30 @@ def table_footer(type):
     print "</tbody></table>"
 
 
-def table_row(source, version, arch, last_mod, maint, distribution, closes, fingerprint, sponsor, changedby):
+def find_bug_severities(bugnrs):
+    """Take a list of bug numbers and
+    return a dictionary with bug number - severity pairs."""
+    statuses = None
+    try: statuses = debianbts.get_status(bugnrs)
+    except Exception:
+        return None
+    severities = {}
+    for bug_status in statuses:
+        severities[bug_status.bug_num] = bug_status.severity
+    return severities
+
+def rcbug_close_check(closes):
+    """Take a list of bug numbers and determine if at least one of them
+    is release critical."""
+    severity_list = find_bug_severities(closes)
+    if severity_list:
+        severities = severity_list.values()
+        return ('critical' in severities) or \
+               ('serious' in severities) or \
+               ('grave' in severities)
+    return False
+
+def table_row(source, version, arch, last_mod, maint, distribution, closes, fingerprint, sponsor, changedby, fixes_rcbug):
 
     global row_number
 
@@ -274,6 +298,9 @@ def table_row(source, version, arch, last_mod, maint, distribution, closes, fing
         if dist == "experimental":
             trclass = "exp"
 
+    if fixes_rcbug:
+        trclass = "rcfix"
+
     if not len(session.query(DBSource).filter_by(source = source).all()):
         trclass += " binNEW"
     session.commit()
@@ -443,7 +470,8 @@ def process_changes_files(changes_files, type, log):
             note = " | [N]"
         else:
             note = ""
-        entries.append([source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, filename])
+        fixes_rcbug = rcbug_close_check(closes)
+        entries.append([source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, filename, fixes_rcbug])
 
     # direction entry consists of "Which field, which direction, time-consider" where
     # time-consider says how we should treat last_modified. Thats all.
@@ -485,7 +513,7 @@ def process_changes_files(changes_files, type, log):
     if Cnf.has_key("Queue-Report::Options::822"):
         # print stuff out in 822 format
         for entry in entries:
-            (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, changes_file) = entry
+            (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, changes_file, fixes_rcbug) = entry
 
             # We'll always have Source, Version, Arch, Mantainer, and Dist
             # For the rest, check to see if we have them, then print them out
@@ -528,8 +556,8 @@ def process_changes_files(changes_files, type, log):
             source_count = len(per_source_items)
             table_header(type.upper(), source_count, total_count)
             for entry in entries:
-                (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, undef) = entry
-                table_row(source, version_list, arch_list, time_pp(last_modified), maint, distribution, closes, fingerprint, sponsor, changedby)
+                (source, binary, version_list, arch_list, note, last_modified, maint, distribution, closes, fingerprint, sponsor, changedby, undef, fixes_rcbug) = entry
+                table_row(source, version_list, arch_list, time_pp(last_modified), maint, distribution, closes, fingerprint, sponsor, changedby, entries, fixes_rcbug)
             table_footer(type.upper())
     elif not Cnf.has_key("Queue-Report::Options::822"):
     # The "normal" output without any formatting.
@@ -537,7 +565,7 @@ def process_changes_files(changes_files, type, log):
 
         msg = ""
         for entry in entries:
-            (source, binary, version_list, arch_list, note, last_modified, undef, undef, undef, undef, undef, undef, undef) = entry
+            (source, binary, version_list, arch_list, note, last_modified, undef, undef, undef, undef, undef, undef, undef, fixes_rcbug) = entry
             msg += format % (source, version_list, arch_list, note, time_pp(last_modified))
 
         if msg: