mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-06-06 09:31:43 +00:00
allmydata/__init__.py: Nicer reporting of unparseable version numbers in dependencies. fixes #1388
This commit is contained in:
parent
2b9d333835
commit
f3246a9ca0
@ -133,8 +133,13 @@ def get_platform():
|
|||||||
|
|
||||||
|
|
||||||
from allmydata.util import verlib
|
from allmydata.util import verlib
|
||||||
def normalized_version(verstr):
|
def normalized_version(verstr, what=None):
|
||||||
return verlib.NormalizedVersion(verlib.suggest_normalized_version(verstr))
|
try:
|
||||||
|
return verlib.NormalizedVersion(verlib.suggest_normalized_version(verstr))
|
||||||
|
except (StandardError, verlib.IrrationalVersionError), e:
|
||||||
|
cls, value, traceback = sys.exc_info()
|
||||||
|
raise PackagingError, ("could not parse %s due to %s: %s"
|
||||||
|
% (what or repr(verstr), cls.__name__, value)), traceback
|
||||||
|
|
||||||
|
|
||||||
def get_package_versions_and_locations():
|
def get_package_versions_and_locations():
|
||||||
@ -217,19 +222,19 @@ def check_requirement(req, vers_and_locs):
|
|||||||
raise ImportError("could not import %r for requirement %r" % (comment, req))
|
raise ImportError("could not import %r for requirement %r" % (comment, req))
|
||||||
if actual == 'unknown':
|
if actual == 'unknown':
|
||||||
return
|
return
|
||||||
actualver = normalized_version(actual)
|
actualver = normalized_version(actual, what="actual version %r of %s from %r" % (actual, name, location))
|
||||||
|
|
||||||
for r in reqlist:
|
for r in reqlist:
|
||||||
s = r.split('>=')
|
s = r.split('>=')
|
||||||
if len(s) == 2:
|
if len(s) == 2:
|
||||||
required = s[1].strip(' ')
|
required = s[1].strip(' ')
|
||||||
if actualver >= normalized_version(required):
|
if actualver >= normalized_version(required, what="required minimum version %r in %r" % (required, req)):
|
||||||
return # minimum requirement met
|
return # minimum requirement met
|
||||||
else:
|
else:
|
||||||
s = r.split('==')
|
s = r.split('==')
|
||||||
if len(s) == 2:
|
if len(s) == 2:
|
||||||
required = s[1].strip(' ')
|
required = s[1].strip(' ')
|
||||||
if actualver == normalized_version(required):
|
if actualver == normalized_version(required, what="required exact version %r in %r" % (required, req)):
|
||||||
return # exact requirement met
|
return # exact requirement met
|
||||||
else:
|
else:
|
||||||
raise PackagingError("no version info or could not understand requirement %r" % (req,))
|
raise PackagingError("no version info or could not understand requirement %r" % (req,))
|
||||||
|
@ -20,12 +20,20 @@ class CheckRequirement(unittest.TestCase):
|
|||||||
|
|
||||||
check_requirement("foolscap[secure_connections] >= 0.6.0", {"foolscap": ("0.7.0", "", None)})
|
check_requirement("foolscap[secure_connections] >= 0.6.0", {"foolscap": ("0.7.0", "", None)})
|
||||||
|
|
||||||
|
try:
|
||||||
|
check_requirement("foolscap[secure_connections] >= 0.6.0", {"foolscap": ("0.6.1+", "", None)})
|
||||||
|
# succeeding is ok
|
||||||
|
except PackagingError, e:
|
||||||
|
self.failUnlessIn("could not parse", str(e))
|
||||||
|
|
||||||
self.failUnlessRaises(PackagingError, check_requirement,
|
self.failUnlessRaises(PackagingError, check_requirement,
|
||||||
"foolscap[secure_connections] >= 0.6.0", {"foolscap": ("0.5.1", "", None)})
|
"foolscap[secure_connections] >= 0.6.0", {"foolscap": ("0.5.1", "", None)})
|
||||||
self.failUnlessRaises(PackagingError, check_requirement,
|
self.failUnlessRaises(PackagingError, check_requirement,
|
||||||
"pycrypto == 2.0.1, == 2.1, >= 2.3", {"pycrypto": ("2.2.0", "", None)})
|
"pycrypto == 2.0.1, == 2.1, >= 2.3", {"pycrypto": ("2.2.0", "", None)})
|
||||||
self.failUnlessRaises(PackagingError, check_requirement,
|
self.failUnlessRaises(PackagingError, check_requirement,
|
||||||
"foo >= 1.0", {})
|
"foo >= 1.0", {})
|
||||||
|
self.failUnlessRaises(PackagingError, check_requirement,
|
||||||
|
"foo >= 1.0", {"foo": ("irrational", "", None)})
|
||||||
|
|
||||||
self.failUnlessRaises(ImportError, check_requirement,
|
self.failUnlessRaises(ImportError, check_requirement,
|
||||||
"foo >= 1.0", {"foo": (None, None, "foomodule")})
|
"foo >= 1.0", {"foo": (None, None, "foomodule")})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user