[Python-checkins] distutils2: Fix comparison bug with 'rc' versions (#11841)

eric.araujo python-checkins at python.org
Mon Feb 27 12:29:44 CET 2012


http://hg.python.org/distutils2/rev/c82c97b2eae1
changeset: 1290:c82c97b2eae1
user: Éric Araujo <merwok at netwok.org>
date: Mon Feb 27 11:57:12 2012 +0100
summary:
 Fix comparison bug with 'rc' versions (#11841)
files:
 CHANGES.txt | 1 +
 distutils2/tests/test_version.py | 9 +++++++
 distutils2/version.py | 24 ++++++++++---------
 3 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -168,6 +168,7 @@
 --libraries option [éric]
 - #13974: add test for util.set_platform [tshepang]
 - #6884: Fix MANIFEST.in parsing bugs on Windows [éric, nadeem]
+- #11841: Fix comparison bug with 'rc' versions [filip]
 
 
 1.0a3 - 2010年10月08日
diff --git a/distutils2/tests/test_version.py b/distutils2/tests/test_version.py
--- a/distutils2/tests/test_version.py
+++ b/distutils2/tests/test_version.py
@@ -16,6 +16,7 @@
 (V('1.2'), '1.2'),
 (V('1.2.3a4'), '1.2.3a4'),
 (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'),
@@ -146,6 +147,14 @@
 """
 doctest.script_from_examples(comparison_doctest_string)
 
+ # the doctest above is never run, so temporarily add real unit
+ # tests until the doctest is rewritten
+ self.assertLessEqual(V('1.2.0rc1'), V('1.2.0'))
+ self.assertGreater(V('1.0'), V('1.0c2'))
+ self.assertGreater(V('1.0'), V('1.0rc2'))
+ self.assertGreater(V('1.0rc2'), V('1.0rc1'))
+ self.assertGreater(V('1.0c4'), V('1.0c1'))
+
 def test_suggest_normalized_version(self):
 
 self.assertEqual(suggest('1.0'), '1.0')
diff --git a/distutils2/version.py b/distutils2/version.py
--- a/distutils2/version.py
+++ b/distutils2/version.py
@@ -11,19 +11,20 @@
 # A marker used in the second and third parts of the `parts` tuple, for
 # versions that don't have those segments, to sort properly. An example
 # of versions in sort order ('highest' last):
-# 1.0b1 ((1,0), ('b',1), ('f',))
-# 1.0.dev345 ((1,0), ('f',), ('dev', 345))
-# 1.0 ((1,0), ('f',), ('f',))
-# 1.0.post256.dev345 ((1,0), ('f',), ('f', 'post', 256, 'dev', 345))
-# 1.0.post345 ((1,0), ('f',), ('f', 'post', 345, 'f'))
+# 1.0b1 ((1,0), ('b',1), ('z',))
+# 1.0.dev345 ((1,0), ('z',), ('dev', 345))
+# 1.0 ((1,0), ('z',), ('z',))
+# 1.0.post256.dev345 ((1,0), ('z',), ('z', 'post', 256, 'dev', 345))
+# 1.0.post345 ((1,0), ('z',), ('z', 'post', 345, 'z'))
 # ^ ^ ^
-# 'b' < 'f' ---------------------/ | |
+# 'b' < 'z' ---------------------/ | |
 # | |
-# 'dev' < 'f' < 'post' -------------------/ |
+# 'dev' < 'z' ----------------------------/ |
 # |
-# 'dev' < 'f' ----------------------------------------------/
-# Other letters would do, but 'f' for 'final' is kind of nice.
-_FINAL_MARKER = ('f',)
+# 'dev' < 'z' ----------------------------------------------/
+# 'f' for 'final' would be kind of nice, but due to bugs in the support of
+# 'rc' we must use 'z'
+_FINAL_MARKER = ('z',)
 
 _VERSION_RE = re.compile(r'''
 ^
@@ -167,8 +168,9 @@
 if prerel is not _FINAL_MARKER:
 s += prerel[0]
 s += '.'.join(str(v) for v in prerel[1:])
+ # XXX clean up: postdev is always true; code is obscure
 if postdev and postdev is not _FINAL_MARKER:
- if postdev[0] == 'f':
+ if postdev[0] == _FINAL_MARKER[0]:
 postdev = postdev[1:]
 i = 0
 while i < len(postdev):
-- 
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /