From 5c7286abf3ff316a802de2b41d246a07f6b04257 Mon Sep 17 00:00:00 2001 From: Kumar Appaiah Date: Sat, 25 Sep 2010 17:04:10 -0500 Subject: [PATCH] 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 --- dak/queue_report.py | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/dak/queue_report.py b/dak/queue_report.py index e2d8578b..9c349892 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 "" -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: -- 2.39.2