[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] Add functions to colourize RC bug fixing packages differently



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 |   40 ++++++++++++++++++++++++++++++++++------
 1 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/dak/queue_report.py b/dak/queue_report.py
index e2d8578..9c34989 100755
--- a/dak/queue_report.py
+++ b/dak/queue_report.py
@@ -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:
-- 
1.5.6.5



Reply to: