summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorFlorian Weimer <fw@deneb.enyo.de>2010-05-30 19:14:00 +0000
committerFlorian Weimer <fw@deneb.enyo.de>2010-05-30 19:14:00 +0000
commite692c8b687bd1e803c6e70d416ad6ee111b7c63e (patch)
treeaf9a0df71f620a6e9da8ffafe89eaedb80d9e837 /lib
parent6213c44d214a9f5729300722b28dab7b54f2139c (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.py24
-rw-r--r--lib/python/sectracker_test/test_analyzers.py4
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()

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