Author: fw Date: 2005-10-20 09:01:15 +0000 (Thu, 20 Oct 2005) New Revision: 2478 Modified: bin/tracker.cgi lib/python/security_db.py Log: r304@deneb: fw | 2005-10-01 11:19:27 +0200 Add overview page for the stable suite. bin/tracker.cgi (print_stable_status): New function. lib/python/security_db.py (DB.initSchema): Add stable_status view. Modified: bin/tracker.cgi ==================================================================--- bin/tracker.cgi 2005-10-20 09:00:51 UTC (rev 2477) +++ bin/tracker.cgi 2005-10-20 09:01:15 UTC (rev 2478) @@ -648,7 +648,9 @@ <h2>Starting points</h2> """ - print_menu([(''status/release/testing'', + print_menu([(''status/release/stable'', + ''Vulnerable packages in the stable suite''), + (''status/release/testing'', ''Vulnerable packages in the testing suite''), (''status/release/unstable'', ''Vulnerable packages in the unstable suite''), @@ -843,6 +845,34 @@ print_footer() + def print_stable_status(): + db = security_db.DB(''../data/security.db'') + + print_title("Vulnerable source packages in stable") + + def gen(): + old_pkg_name = '''' + for (pkg_name, bug_name, archive, urgency) in db.cursor().execute( + """SELECT package, bug, section, urgency + FROM stable_status"""): + if pkg_name == old_pkg_name: + pkg_name = '''' + else: + old_pkg_name = pkg_name + if archive <> ''main'': + pkg_name = "%s (%s)" % (pkg_name, archive) + + if urgency == ''unknown'': + urgency = '''' + elif urgency == ''high'': + urgency = make_red(urgency) + + yield pkg_name, make_xref(bug_name), urgency + + print_table(gen(), caption=("Package", "Bug", "Urgency")) + + print_footer() + def print_testing_status(): db = security_db.DB(''../data/security.db'') @@ -1009,6 +1039,7 @@ ''/data/funny-versions'' : print_funny_versions, ''/data/missing-epochs'' : print_missing_epochs, ''/data/unknown-packages'' : print_unknown_packages, + ''/status/release/stable'' : print_stable_status, ''/status/release/testing'' : print_testing_status, ''/status/release/unstable'' : print_unstable_status, ''/status/todo'' : print_todo, Modified: lib/python/security_db.py ==================================================================--- lib/python/security_db.py 2005-10-20 09:00:51 UTC (rev 2477) +++ lib/python/security_db.py 2005-10-20 09:01:15 UTC (rev 2478) @@ -93,7 +93,7 @@ self.db = apsw.Connection(name) self.verbose = verbose - self.schema_version = 12 + self.schema_version = 13 self._initFunctions() c = self.cursor() @@ -288,6 +288,24 @@ AND sp.subrelease = '''' ORDER BY sp.name, urgency_to_number(st.urgency), st.bug_name""") + cursor.execute( + """CREATE VIEW stable_status AS + SELECT DISTINCT sp.name AS package, st.bug_name AS bug, + sp.archive AS section, st.urgency AS urgency + FROM source_package_status AS st, source_packages AS sp + WHERE st.vulnerable AND st.urgency <> ''unimportant'' + AND sp.rowid = st.package AND sp.release = ''sarge'' + AND sp.subrelease = '''' + AND NOT COALESCE((SELECT NOT vulnerable + FROM source_packages AS secp, source_package_status AS secst + WHERE secp.name = sp.name + AND secp.release = ''sarge'' AND secp.subrelease = ''security'' + AND secp.archive = sp.archive + AND secst.bug_name = st.bug_name + AND secst.package = secp.rowid), 0) + ORDER BY sp.name, urgency_to_number(urgency), st.bug_name""") + + cursor.execute("PRAGMA user_version = %d" % self.schema_version) def _initFunctions(self): @@ -1285,14 +1303,21 @@ """Returns a generator for a list of (BUG, DESCRIPTION) pairs which have the requested status.""" return cursor.execute( - """SELECT name, description + """SELECT DISTINCT name, description FROM (SELECT bugs.name AS name, bugs.description AS description, - MAX(st.vulnerable) AS vulnerable + MAX(st.vulnerable + AND COALESCE((SELECT st2.vulnerable FROM source_packages AS sp2, + source_package_status AS st2 + WHERE sp2.name = sp.name AND sp2.release = sp.release + AND sp2.subrelease = ''security'' AND sp2.archive = sp.archive + AND st2.package = sp2.rowid AND st2.bug_name = st.bug_name + ORDER BY st2.vulnerable DESC), 1)) AS vulnerable FROM source_packages AS sp, source_package_status AS st, bugs - WHERE sp.name = ? AND st.package = sp.rowid + WHERE sp.name = ? AND sp.subrelease <> ''security'' + AND st.package = sp.rowid AND bugs.name = st.bug_name AND st.urgency <> ''unimportant'' - GROUP BY bugs.name, bugs.description) + GROUP BY bugs.name, bugs.description, sp.name) WHERE vulnerable = ? ORDER BY name""", (pkg, vulnerable))