diff options
| author | Tarek Ziade <tarek@ziade.org> | 2011-01-01 10:47:44 +0100 |
|---|---|---|
| committer | Tarek Ziade <tarek@ziade.org> | 2011-01-01 10:47:44 +0100 |
| commit | 03dae7f7be990bc07f76db4007d782f28fa91b1d (patch) | |
| tree | f76628cdef5f81eee3943c1d412d24ad27580430 | |
| parent | 65c7b915e010ae4335ad66cca66b0eb67f84ea3f (diff) | |
| download | disutils2-03dae7f7be990bc07f76db4007d782f28fa91b1d.tar.gz | |
make sure project that have numbers in their names can be parsed
| -rw-r--r-- | distutils2/tests/test_version.py | 9 | ||||
| -rw-r--r-- | distutils2/version.py | 32 |
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.""" |
