diff options
author | Tarek Ziade <tarek@ziade.org> | 2012-03-12 14:06:59 -0700 |
---|---|---|
committer | Tarek Ziade <tarek@ziade.org> | 2012-03-12 14:06:59 -0700 |
commit | 055a999a0944fb426e1655d59e3d8399f123b259 (patch) | |
tree | cecb02f41707322e8a9ac11442f8deed000e5d74 /distutils2 | |
parent | 9fd3561d32bf23fcfa8fed8ea49c8ade2e3b8597 (diff) | |
download | disutils2-055a999a0944fb426e1655d59e3d8399f123b259.tar.gz |
Removed the trailing zero wiping (#14264)
Diffstat (limited to 'distutils2')
-rw-r--r-- | distutils2/pypi/simple.py | 4 | ||||
-rw-r--r-- | distutils2/tests/test_version.py | 10 | ||||
-rw-r--r-- | distutils2/version.py | 18 |
3 files changed, 20 insertions, 12 deletions
diff --git a/distutils2/pypi/simple.py b/distutils2/pypi/simple.py index 2a7185a..fd12fb4 100644 --- a/distutils2/pypi/simple.py +++ b/distutils2/pypi/simple.py @@ -198,8 +198,8 @@ class Crawler(BaseClient): def get_release(self, requirements, prefer_final=None): """Return only one release that fulfill the given requirements""" predicate = get_version_predicate(requirements) - release = self.get_releases(predicate, prefer_final)\ - .get_last(predicate) + releases = self.get_releases(predicate, prefer_final) + release = releases.get_last(predicate) if not release: raise ReleaseNotFound("No release matches the given criterias") return release diff --git a/distutils2/tests/test_version.py b/distutils2/tests/test_version.py index 00b38d2..d2d43ce 100644 --- a/distutils2/tests/test_version.py +++ b/distutils2/tests/test_version.py @@ -18,8 +18,8 @@ class VersionTestCase(unittest.TestCase): (V('1.2c4'), '1.2c4'), (V('4.17rc2'), '4.17rc2'), (V('1.2.3.4'), '1.2.3.4'), - (V('1.2.3.4.0b3'), '1.2.3.4b3'), - (V('1.2.0.0.0'), '1.2'), + (V('1.2.3.4.0b3', drop_trailing_zeros=True), '1.2.3.4b3'), + (V('1.2.0.0.0', drop_trailing_zeros=True), '1.2'), (V('1.0.dev345'), '1.0.dev345'), (V('1.0.post456.dev623'), '1.0.post456.dev623')) @@ -249,6 +249,12 @@ class VersionTestCase(unittest.TestCase): for version in other_versions: self.assertFalse(V(version).is_final) + def test_micro_predicate(self): + self.assertNotEqual(V('3.4.0'), V('3.4')) + predicate = VersionPredicate('zope.event (3.4.0)') + self.assertTrue(predicate.match('3.4.0')) + self.assertFalse(predicate.match('3.4.1')) + class VersionWhiteBoxTestCase(unittest.TestCase): diff --git a/distutils2/version.py b/distutils2/version.py index baec726..7f49a2e 100644 --- a/distutils2/version.py +++ b/distutils2/version.py @@ -57,7 +57,8 @@ class NormalizedVersion(object): 1.2a # release level must have a release serial 1.2.3b """ - def __init__(self, s, error_on_huge_major_num=True): + def __init__(self, s, error_on_huge_major_num=True, + drop_trailing_zeros=False): """Create a NormalizedVersion instance from a version string. @param s {str} The version string. @@ -74,8 +75,12 @@ class NormalizedVersion(object): and, e.g. downstream Linux package managers, will forever remove the possibility of using a version number like "1.0" (i.e. where the major number is less than that huge major number). + @param drop_trailing_zeros {bool} Whether to drop trailing zeros + + from the returned list. Default True. """ self.is_final = True # by default, consider a version as final. + self.drop_trailing_zeros = drop_trailing_zeros self._parse(s, error_on_huge_major_num) @classmethod @@ -93,7 +98,7 @@ class NormalizedVersion(object): parts = [] # main version - block = self._parse_numdots(groups['version'], s, False, 2) + block = self._parse_numdots(groups['version'], s, 2) extraversion = groups.get('extraversion') if extraversion not in ('', None): block += self._parse_numdots(extraversion[1:], s) @@ -130,16 +135,13 @@ class NormalizedVersion(object): raise HugeMajorVersionNumError("huge major version number, %r, " "which might cause future problems: %r" % (self.parts[0][0], s)) - def _parse_numdots(self, s, full_ver_str, drop_trailing_zeros=True, - pad_zeros_length=0): + def _parse_numdots(self, s, full_ver_str, pad_zeros_length=0): """Parse 'N.N.N' sequences, return a list of ints. @param s {str} 'N.N.N...' sequence to be parsed @param full_ver_str {str} The full version string from which this comes. Used for error strings. - @param drop_trailing_zeros {bool} Whether to drop trailing zeros - from the returned list. Default True. - @param pad_zeros_length {int} The length to which to pad the + @param pad_zeros_length {int} The length to which to pad the returned list with zeros, if necessary. Default 0. """ nums = [] @@ -148,7 +150,7 @@ class NormalizedVersion(object): raise IrrationalVersionError("cannot have leading zero in " "version number segment: '%s' in %r" % (n, full_ver_str)) nums.append(int(n)) - if drop_trailing_zeros: + if self.drop_trailing_zeros: while nums and nums[-1] == 0: nums.pop() while len(nums) < pad_zeros_length: |