Fix vercmp so 1b > 1 and add corresponding tests. (trunk r15162)
authorZac Medico <zmedico@gentoo.org>
Fri, 29 Jan 2010 18:44:47 +0000 (18:44 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 29 Jan 2010 18:44:47 +0000 (18:44 -0000)
svn path=/main/branches/2.1.7/; revision=15230

pym/portage/tests/versions/test_vercmp.py
pym/portage/versions.py

index 3aecbfa87ccfe347513f06e0be79851503c57f37..e8eb9755ea59b7883669b13dcb59670e3408b03e 100644 (file)
@@ -18,6 +18,7 @@ class VerCmpTestCase(TestCase):
                        ("999999999999999999999999999999", "999999999999999999999999999998"),
                        ("1.0.0", "1.0"),
                        ("1.0b", "1.0.0"),
+                       ("1b", "1"),
                        ("12.2b", "12.2.5"),
                ]
                for test in tests:
@@ -37,6 +38,7 @@ class VerCmpTestCase(TestCase):
                        ("1.0", "1.0-r1"),
                        ("1.0", "1.0.0"),
                        ("1.0.0", "1.0b"),
+                       ("1", "1b"),
                        ("12.2.5", "12.2b"),
                ]
                for test in tests:
@@ -63,6 +65,7 @@ class VerCmpTestCase(TestCase):
                        ("1.0", "1.0-r1"),
                        ("1.0-r1", "1.0"),
                        ("1.0", "1.0.0"),
+                       ("1b", "1"),
                        ("12.2b", "12.2"),
                ]
                for test in tests:
index 72c79ba770b88a34d705571ac55d4b4af28ff2cd..20837817267bdca205ca5f634b359d5b1d55cc62 100644 (file)
@@ -100,10 +100,14 @@ def vercmp(ver1, ver2, silent=1):
        list2 = [int(match2.group(2))]
 
        # this part would greatly benefit from a fixed-length version pattern
-       if len(match1.group(3)) or len(match2.group(3)):
+       if match1.group(3) or match2.group(3):
                vlist1 = match1.group(3)[1:].split(".")
                vlist2 = match2.group(3)[1:].split(".")
+       else:
+               vlist1 = []
+               vlist2 = []
 
+       if match1.group(5) or match2.group(5):
                # and now the final letter
                if match1.group(5):
                        vlist1.append(str(ord(match1.group(5))))
@@ -114,6 +118,8 @@ def vercmp(ver1, ver2, silent=1):
                else:
                        vlist2.append('0')
 
+       if vlist1 or vlist2:
+
                for i in range(0, max(len(vlist1), len(vlist2))):
                        # Implcit .0 is given a value of -1, so that 1.0.0 > 1.0, since it
                        # would be ambiguous if two versions that aren't literally equal