Author: fw Date: 2005-09-17 22:38:40 +0000 (Sat, 17 Sep 2005) New Revision: 2034 Modified: lib/python/bugs.py Log: data/security.db (BugFromDB): Load the bug even when an alias name is used (CAN vs. CVE, DSA without revision number). Modified: lib/python/bugs.py ==================================================================--- lib/python/bugs.py 2005-09-17 16:44:12 UTC (rev 2033) +++ lib/python/bugs.py 2005-09-17 22:38:40 UTC (rev 2034) @@ -319,42 +319,70 @@ class BugFromDB(Bug): def __init__(self, cursor, name): assert type(name) == types.StringType - for r in cursor.execute(''SELECT * FROM bugs WHERE name = ?'', (name,)): - rdesc = cursor.getdescription() - data = {} - for j in range(len(rdesc)): - data[rdesc[j][0]] = r[j] - # FIXME: load date - Bug.__init__(self, data[''source_file''], data[''source_line''], - data[''release_date''], name, - data[''description''], comments=[], - notes=[], xref=[], - not_for_us=not not data[''not_for_us'']) - for (x,) in cursor.execute\ - (''SELECT target FROM bugs_xref WHERE source = ?'', (name,)): - self.xref.append(x) - for (t, c) in cursor.execute\ - ("""SELECT typ, comment FROM bugs_notes - WHERE bug_name = ? - ORDER BY rowid""", - (name,)): - self.comments.append((t, c)) - # temporary list required because loadBugs needs the cursor - for nid, package, fixed_version, release, urgency, package_kind \ - in list(cursor.execute - ("""SELECT id, package, fixed_version, release, urgency, - package_kind - FROM package_notes WHERE bug_name = ?""", (name,))): - n = PackageNote(package, fixed_version, release, urgency) - n.id = nid - n.bug_name = name - n.package_kind = package_kind - n.loadBugs(cursor) - self.notes.append(n) - return - raise ValueError, "unknown bug " + `name` + def lookup(bug): + for r in cursor.execute(''SELECT * FROM bugs WHERE name = ?'', + (bug,)): + return r + else: + return None + def lookup_dsa(bug): + for r in cursor.execute( + """SELECT * FROM bugs + WHERE name = ? OR name LIKE (? || ''-%'') + ORDER BY release_date DESC + LIMIT 1""", (bug, bug,)): + return r + else: + return bug + + r = lookup(name) + if r is None: + name_components = name.split(''-'') + name_source = name_components[0] + if name_source == ''CAN'': + r = lookup(''-''.join([''CVE''] + name_components[1:])) + elif name_source == ''CVE'': + r = lookup(''-''.join([''CAN''] + name_components[1:])) + elif name_source == ''DSA'' and 2 <= len(name_components) <= 3: + r = lookup_dsa(''DSA-'' + name_components[1]) + if r is None: + raise ValueError, "unknown bug " + `name` + + rdesc = cursor.getdescription() + data = {} + for j in range(len(rdesc)): + data[rdesc[j][0]] = r[j] + name = data[''name''] + Bug.__init__(self, data[''source_file''], data[''source_line''], + data[''release_date''], name, + data[''description''], comments=[], + notes=[], xref=[], + not_for_us=not not data[''not_for_us'']) + for (x,) in cursor.execute\ + (''SELECT target FROM bugs_xref WHERE source = ?'', (name,)): + self.xref.append(x) + for (t, c) in cursor.execute\ + ("""SELECT typ, comment FROM bugs_notes + WHERE bug_name = ? + ORDER BY rowid""", + (name,)): + self.comments.append((t, c)) + + # temporary list required because loadBugs needs the cursor + for nid, package, fixed_version, release, urgency, package_kind \ + in list(cursor.execute + ("""SELECT id, package, fixed_version, release, urgency, + package_kind + FROM package_notes WHERE bug_name = ?""", (name,))): + n = PackageNote(package, fixed_version, release, urgency) + n.id = nid + n.bug_name = name + n.package_kind = package_kind + n.loadBugs(cursor) + self.notes.append(n) + def getDebianBugs(self, cursor): """Returns a list of Debian bugs to which the bug report refers.""" return map(lambda (x,): x, cursor.execute(