summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTarek Ziade <tarek@ziade.org>2011-01-01 10:47:44 +0100
committerTarek Ziade <tarek@ziade.org>2011-01-01 10:47:44 +0100
commit03dae7f7be990bc07f76db4007d782f28fa91b1d (patch)
treef76628cdef5f81eee3943c1d412d24ad27580430
parent65c7b915e010ae4335ad66cca66b0eb67f84ea3f (diff)
downloaddisutils2-03dae7f7be990bc07f76db4007d782f28fa91b1d.tar.gz
make sure project that have numbers in their names can be parsed
-rw-r--r--distutils2/tests/test_version.py9
-rw-r--r--distutils2/version.py32
2 files changed, 28 insertions, 13 deletions
diff --git a/distutils2/tests/test_version.py b/distutils2/tests/test_version.py
index 9329b3f..7f9cab6 100644
--- a/distutils2/tests/test_version.py
+++ b/distutils2/tests/test_version.py
@@ -201,6 +201,15 @@ class VersionTestCase(unittest.TestCase):
# XXX need to silent the micro version in this case
#assert not VersionPredicate('Ho (<3.0,!=2.6)').match('2.6.3')
+
+ # Make sure a predicate that ends with a number works
+ self.assertTrue(VersionPredicate('virtualenv5 (1.0)').match('1.0'))
+ self.assertTrue(VersionPredicate('virtualenv5').match('1.0'))
+ self.assertTrue(VersionPredicate('vi5two').match('1.0'))
+ self.assertTrue(VersionPredicate('5two').match('1.0'))
+ self.assertTrue(VersionPredicate('vi5two 1.0').match('1.0'))
+ self.assertTrue(VersionPredicate('5two 1.0').match('1.0'))
+
# test repr
for predicate in predicates:
self.assertEqual(str(VersionPredicate(predicate)), predicate)
diff --git a/distutils2/version.py b/distutils2/version.py
index 297ff15..a240256 100644
--- a/distutils2/version.py
+++ b/distutils2/version.py
@@ -322,7 +322,8 @@ def suggest_normalized_version(s):
return None
-_PREDICATE = re.compile(r"(?i)^\s*([a-z_][\sa-zA-Z_-]*(?:\.[a-z_]\w*)*)(.*)")
+# A predicate is: "ProjectName (VERSION1, VERSION2, ..)
+_PREDICATE = re.compile(r"(?i)^\s*(\w[\s\w-]*(?:\.\w*)*)(.*)")
_VERSIONS = re.compile(r"^\s*\((?P<versions>.*)\)\s*$|^\s*(?P<versions2>.*)\s*$")
_PLAIN_VERSIONS = re.compile(r"^\s*(.*)\s*$")
_SPLIT_CMP = re.compile(r"^\s*(<=|>=|<|>|!=|==)\s*([^\s,]+)\s*$")
@@ -359,19 +360,24 @@ class VersionPredicate(object):
name, predicates = match.groups()
self.name = name.strip()
self.predicates = []
+ if predicates is None:
+ return
+
predicates = _VERSIONS.match(predicates.strip())
- if predicates is not None:
- predicates = predicates.groupdict()
- if predicates['versions'] is not None:
- versions = predicates['versions']
- else:
- versions = predicates.get('versions2')
-
- if versions is not None:
- for version in versions.split(','):
- if version.strip() == '':
- continue
- self.predicates.append(_split_predicate(version))
+ if predicates is None:
+ return
+
+ predicates = predicates.groupdict()
+ if predicates['versions'] is not None:
+ versions = predicates['versions']
+ else:
+ versions = predicates.get('versions2')
+
+ if versions is not None:
+ for version in versions.split(','):
+ if version.strip() == '':
+ continue
+ self.predicates.append(_split_predicate(version))
def match(self, version):
"""Check if the provided version matches the predicates."""