diff options
author | Florian Weimer <fw@deneb.enyo.de> | 2010-05-30 19:14:00 +0000 |
---|---|---|
committer | Florian Weimer <fw@deneb.enyo.de> | 2010-05-30 19:14:00 +0000 |
commit | e692c8b687bd1e803c6e70d416ad6ee111b7c63e (patch) | |
tree | af9a0df71f620a6e9da8ffafe89eaedb80d9e837 /lib | |
parent | 6213c44d214a9f5729300722b28dab7b54f2139c (diff) |
sectracker.analyzers.bestversion(): new subroutine
git-svn-id: svn+ssh://svn.debian.org/svn/secure-testing@14769 e39458fd-73e7-0310-bf30-c45bca0a0e42
Diffstat (limited to 'lib')
-rw-r--r-- | lib/python/sectracker/analyzers.py | 24 | ||||
-rw-r--r-- | lib/python/sectracker_test/test_analyzers.py | 4 |
2 files changed, 28 insertions, 0 deletions
diff --git a/lib/python/sectracker/analyzers.py b/lib/python/sectracker/analyzers.py index 814ae526da..af45bc005e 100644 --- a/lib/python/sectracker/analyzers.py +++ b/lib/python/sectracker/analyzers.py @@ -225,3 +225,27 @@ def fixedversions(bugdb, copysrc, versions, diag): result.append(Vulnerability(bug.header.name, pname, unstable_fixed, other_versions)) return result + +def bestversion(config, codename, pkg, requested_members=None): + """Returns the source package with the highest version among the + requested sub-repository members.""" + members = config.distributions[codename]["members"] + if requested_members is None: + names = members.values() + else: + names = [v for k, v in members.items() if k in requested_members] + fm = config.filemap() + bestver = None + bestpkg = None + for name, mems in members.items(): + if requested_members is None or name in requested_members: + for mem in mems: + for comp in fm[mem].values(): + if pkg in comp: + curpkg = comp[pkg] + curver = curpkg.version + if bestver is None or vercmp(curver, bestver) > 0: + bestver = curver + bestpkg = curpkg + return bestpkg + diff --git a/lib/python/sectracker_test/test_analyzers.py b/lib/python/sectracker_test/test_analyzers.py index fe906c9428..880e58ad02 100644 --- a/lib/python/sectracker_test/test_analyzers.py +++ b/lib/python/sectracker_test/test_analyzers.py @@ -55,6 +55,10 @@ if False: for v in vdb: print v +assert bestversion(c, "sid", "bash").name == "bash" +assert bestversion(c, "sid", "bash", ("unsupported", "supported")).name \ + == "bash" + for err in diag.messages(): print "%s:%d: %s: %s" % (err.file, err.line, err.level, err.message) assert not diag.messages() |