[Secure-testing-commits] r28921 - bin lib/python

Holger Levsen holger at moszumanska.debian.org
Sat Sep 20 07:39:35 UTC 2014


Author: holger
Date: 2014-09-20 07:39:34 +0000 (Sat, 20 Sep 2014)
New Revision: 28921

Modified:
   bin/tracker_service.py
   lib/python/security_db.py
Log:
rewrite DB.availableReleases() to make it possible to sort by release, subrelease and archive

Modified: bin/tracker_service.py
===================================================================
--- bin/tracker_service.py	2014-09-20 05:53:17 UTC (rev 28920)
+++ bin/tracker_service.py	2014-09-20 07:39:34 UTC (rev 28921)
@@ -1127,6 +1127,8 @@
                     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",

Modified: lib/python/security_db.py
===================================================================
--- lib/python/security_db.py	2014-09-20 05:53:17 UTC (rev 28920)
+++ lib/python/security_db.py	2014-09-20 07:39:34 UTC (rev 28921)
@@ -440,6 +440,14 @@
                 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 @@
 
         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,25 +860,28 @@
         if cursor is None:
             cursor = self.cursor()
 
-        releases = {}
-        for r in cursor.execute(
-            """SELECT DISTINCT release, subrelease, archive
-            FROM source_packages"""):
-            releases[r] = (True, [])
-
+        result = []
+        result.append(('', '', '', False, []))
         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)
+            """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)
 
-        result = []
-        for ((rel, subrel, archive), (sources, archs)) in releases.items():
-            result.append((rel, subrel, archive, sources, archs))
-        result.sort()
-
         return result
 
     def getFunnyPackageVersions(self):




More information about the Secure-testing-commits mailing list