diff -r 6c3d67ed3adb distutils2/tests/test_version.py --- a/distutils2/tests/test_version.py Sun Mar 13 15:52:26 2011 -0400 +++ b/distutils2/tests/test_version.py Wed Apr 13 18:51:07 2011 +0200 @@ -99,8 +99,14 @@ True >>> V('1.2.0') >= V('1.2.3') False + >>> V('1.2.0rc1') >= V('1.2.0') + False >>> (V('1.0') > V('1.0b2')) True + >>> (V('1.0') > V('1.0rc2')) + True + >>> (V('1.0rc2') > V('1.0rc1')) + True >>> (V('1.0') > V('1.0c2') > V('1.0c1') > V('1.0b2') > V('1.0b1') ... > V('1.0a2') > V('1.0a1')) True @@ -127,6 +133,8 @@ ... < V('1.0.dev18') ... < V('1.0.dev456') ... < V('1.0.dev1234') + ... < V('1.0rc1') + ... < V('1.0rc2') ... < V('1.0') ... < V('1.0.post456.dev623') # development version of a post release ... < V('1.0.post456')) diff -r 6c3d67ed3adb distutils2/version.py --- a/distutils2/version.py Sun Mar 13 15:52:26 2011 -0400 +++ b/distutils2/version.py Wed Apr 13 18:51:07 2011 +0200 @@ -9,19 +9,22 @@ # 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' < 'post' -------------------/ | # | -# 'dev' < 'f' ----------------------------------------------/ -# Other letters would do, but 'f' for 'final' is kind of nice. -_FINAL_MARKER = ('f',) +# 'dev' < 'z' ----------------------------------------------/ +# At first there was 'f' for 'final' which was kind of nice. However, it +# didn't work with release candidates, e.g. 'f' < 'rc1', that's why it's +# better to use 'z'. +_FINAL_MARKER_CHAR = 'z' +_FINAL_MARKER = (_FINAL_MARKER_CHAR,) _VERSION_RE = re.compile(r''' ^ @@ -166,7 +169,7 @@ s += prerel[0] s += '.'.join(str(v) for v in prerel[1:]) if postdev and postdev is not _FINAL_MARKER: - if postdev[0] == 'f': + if postdev[0] == _FINAL_MARKER_CHAR: postdev = postdev[1:] i = 0 while i < len(postdev):