[Secure-testing-commits] r13336 - lib/python

Raphael Geissert geissert at alioth.debian.org
Sat Nov 21 05:53:13 UTC 2009


Author: geissert
Date: 2009-11-21 05:53:13 +0000 (Sat, 21 Nov 2009)
New Revision: 13336

Modified:
   lib/python/security_db.py
Log:
Make the Sources and Packages parser only return the greatest version
if more than one entry for the same package is found


Modified: lib/python/security_db.py
===================================================================
--- lib/python/security_db.py	2009-11-21 05:35:34 UTC (rev 13335)
+++ lib/python/security_db.py	2009-11-21 05:53:13 UTC (rev 13336)
@@ -484,7 +484,7 @@
             re_source = re.compile\
                 (r'^([a-zA-Z0-9.+-]+)(?:\s+\(([a-zA-Z0-9.+:~-]+)\))?$')
 
-            data = []
+            data = {}
             for pkg in packages:
                 pkg_name = None
                 pkg_version = None
@@ -516,8 +516,14 @@
                     raise SyntaxError\
                           ("package record for %s lacks Architecture: field"
                            % pkg_name)
-                data.append((pkg_name, pkg_version, pkg_arch,
-                             pkg_source, pkg_source_version))
+                if pkg_name in data:
+                    oversion = debian_support.Version(data[pkg_name][0])
+                    if oversion < debian_support.Version(pkg_version):
+                        data[pkg_name] = (pkg_version, pkg_arch,
+                                         pkg_source, pkg_source_version)
+                else:
+                    data[pkg_name] = (pkg_version, pkg_arch,
+                                     pkg_source, pkg_source_version)
 
             return data
 
@@ -580,7 +586,8 @@
             self._clearVersions(cursor)
 
             def gen():
-                for (name, version, archs, source, source_version) in parsed:
+                for name in parsed.keys():
+                    (version, archs, source, source_version) = parsed[name]
                     assert source is None
                     assert source_version is None
                     yield name, release, subrelease, archive, version
@@ -634,7 +641,8 @@
             (release, subrelease, archive, architecture) = match.groups()
             (unch, parsed) = self._parseFile(cursor, filename)
             unchanged = unchanged and unch
-            for (name, version, arch, source, source_version) in parsed:
+            for name in parsed.keys():
+                (version, arch, source, source_version) = parsed[name]
                 if source is None:
                     source = name
                 if source_version is None:




More information about the Secure-testing-commits mailing list