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): _______________________________________________ Secure-testing-commits mailing list Secure-testing-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/secure-testing-commits