diff options
author | Holger Levsen <holger@debian.org> | 2014-09-20 07:39:34 +0000 |
---|---|---|
committer | Holger Levsen <holger@debian.org> | 2014-09-20 07:39:34 +0000 |
commit | 5a745cc0a0fc784d75cb0dda869858655811a243 (patch) | |
tree | 3cb00b64936e7fbf8292fb50f6ea59b0489f7ea3 /lib | |
parent | b258896e837a1b1c7d5e872a036ad53b586cb5a2 (diff) |
rewrite DB.availableReleases() to make it possible to sort by release, subrelease and archive
git-svn-id: svn+ssh://svn.debian.org/svn/secure-testing@28921 e39458fd-73e7-0310-bf30-c45bca0a0e42
Diffstat (limited to 'lib')
-rw-r--r-- | lib/python/security_db.py | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/lib/python/security_db.py b/lib/python/security_db.py index ea6a4360e0..8f11cc8a96 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.""" @@ -848,24 +860,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 |