package: security-tracker severity: minor Hi,
the attached non-intrusive patch basically rewrites the availableRelease() function which is only used to create https://security-tracker.debian.org/tracker/data/releases which currently is not ordered at all. The patch makes it logically by release, subrelease and archive. Shall I push this patch into SVN? cheers, Holger, finally finished chasing what he thought was a low hanging fruit ;)
From f1841ee6be909cd6c8e8c8bf94385edf9637954f Mon Sep 17 00:00:00 2001 From: Holger Levsen <hol...@layer-acht.org> Date: Fri, 19 Sep 2014 17:02:36 +0200 Subject: [PATCH] rewrite DB.availableReleases() to make it possible to sort by release, subrelease and archive --- bin/tracker_service.py | 2 ++ lib/python/security_db.py | 49 +++++++++++++++++++++++++++++++---------------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/bin/tracker_service.py b/bin/tracker_service.py index 4ad08be..4e87dc1 100644 --- a/bin/tracker_service.py +++ b/bin/tracker_service.py @@ -1141,6 +1141,8 @@ not unimportant."""), sources = 'yes' else: sources = 'no' + if 'source' in archs: + archs.remove('source') yield rel, subrel, archive, sources, make_list(archs) return self.create_page( url, "Available releases", diff --git a/lib/python/security_db.py b/lib/python/security_db.py index 4917b46..1abfb8a 100644 --- a/lib/python/security_db.py +++ b/lib/python/security_db.py @@ -440,6 +440,14 @@ class DB: return -1 self.db.createscalarfunction("subrelease_to_number", subrelease_to_number, 1) + archives = ['main', 'contrib', 'non-free'] + def archive_to_number(u): + try: + return archives.index(u) + except ValueError: + return -1 + self.db.createscalarfunction("archive_to_number", archive_to_number, 1) + def release_name(release, subrelease, archive): if archive <> 'main': release = release + '/' + archive @@ -451,6 +459,10 @@ class DB: self.db.createcollation("version", debian_support.version_compare) + def source_arch(): + return "source" + self.db.createscalarfunction("source_arch", source_arch, 0) + def filePrint(self, filename): """Returns a fingerprint string for filename.""" @@ -860,24 +872,27 @@ class DB: if cursor is None: cursor = self.cursor() - releases = {} - for r in cursor.execute( - """SELECT DISTINCT release, subrelease, archive - FROM source_packages"""): - releases[r] = (True, []) - - for (rel, subrel, archive, archs) in cursor.execute( - """SELECT DISTINCT release, subrelease, archive, archs - FROM binary_packages"""): - key = (rel, subrel, archive) - if not releases.has_key(key): - releases[key] = (False, []) - releases[key][1][:] = mergeLists(releases[key][1], archs) - result = [] - for ((rel, subrel, archive), (sources, archs)) in releases.items(): - result.append((rel, subrel, archive, sources, archs)) - result.sort() + result.append(('', '', '', False, [])) + for (rel, subrel, archive, archs) in cursor.execute( + """SELECT * FROM + (SELECT DISTINCT release, subrelease, archive, archs + FROM binary_packages + UNION SELECT DISTINCT release, subrelease, archive, source_arch() as archs + FROM source_packages) + ORDER BY release_to_number(release), subrelease_to_number(subrelease), archive_to_number(archive)"""): + if "source" in archs: + sources=True + else: + sources=False + (p_rel, p_subrel, p_archive, p_sources, p_archs) = result.pop() + if rel == p_rel and subrel == p_subrel and archive == p_archive: + sources = sources or p_sources + result.append((rel, subrel, archive, sources, mergeLists(p_archs, archs))) + else: + result.append((p_rel, p_subrel, p_archive, p_sources, mergeLists([], p_archs))) + result.append((rel, subrel, archive, sources, mergeLists([], archs))) + result.pop(0) return result -- 1.9.1
signature.asc
Description: This is a digitally signed message part.