summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorHolger Levsen <holger@debian.org>2014-09-20 07:39:34 +0000
committerHolger Levsen <holger@debian.org>2014-09-20 07:39:34 +0000
commit5a745cc0a0fc784d75cb0dda869858655811a243 (patch)
tree3cb00b64936e7fbf8292fb50f6ea59b0489f7ea3 /lib
parentb258896e837a1b1c7d5e872a036ad53b586cb5a2 (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.py49
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

© 2014-2024 Faster IT GmbH | imprint | privacy policy