For bug #188449, since python floats have limited range, we multiply both floating...
authorZac Medico <zmedico@gentoo.org>
Wed, 15 Aug 2007 02:50:35 +0000 (02:50 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 15 Aug 2007 02:50:35 +0000 (02:50 -0000)
svn path=/main/branches/2.1.2/; revision=7607

pym/portage_versions.py

index 52db5e747d96d9f6c43a19796c2a555094c1aa39..91b8cc1648ed4d7c63a8bd08d47e6c92930eb1a4 100644 (file)
@@ -98,8 +98,17 @@ def vercmp(ver1, ver2, silent=1):
                                list2.append(int(vlist2[i]))
                        # now we have to use floats so 1.02 compares correctly against 1.1
                        else:
-                               list1.append(float("0."+vlist1[i]))
-                               list2.append(float("0."+vlist2[i]))
+                               # list1.append(float("0."+vlist1[i]))
+                               # list2.append(float("0."+vlist2[i]))
+                               # Since python floats have limited range, we multiply both
+                               # floating point representations by a constant so that they are
+                               # transformed into whole numbers. This allows the practically
+                               # infinite range of a python int to be exploited. The
+                               # multiplication is done by padding both literal strings with
+                               # zeros as necessary to ensure equal length.
+                               max_len = max(len(vlist1[i]), len(vlist2[i]))
+                               list1.append(int(vlist1[i].ljust(max_len, "0")))
+                               list2.append(int(vlist2[i].ljust(max_len, "0")))
 
        # and now the final letter
        if len(match1.group(5)):