[Secure-testing-commits] r2045 - lib/python

Florian Weimer fw at costa.debian.org
Mon Sep 19 15:12:38 UTC 2005


Author: fw
Date: 2005-09-19 15:12:37 +0000 (Mon, 19 Sep 2005)
New Revision: 2045

Modified:
   lib/python/debian_support.py
Log:
Fix bug in the version comparison algorithm.

lib/python/debian_support.py (letterValue):
  New global variable.
(Version.__parse_1):
  Use it to sort letters before non-letters.
(test):
  New test case.


Modified: lib/python/debian_support.py
===================================================================
--- lib/python/debian_support.py	2005-09-19 11:22:21 UTC (rev 2044)
+++ lib/python/debian_support.py	2005-09-19 15:12:37 UTC (rev 2045)
@@ -52,6 +52,21 @@
         file.write("%s:%d: %s\n" % (self.filename, self.lineno, self.msg))
         file.flush()
 
+letterValue = [None] * 256
+def initLetterValue():
+    c = 0
+    for x in range(ord('A'), ord('Z') + 1):
+        letterValue[x] = chr(c)
+        c += 1
+    for x in range(ord('a'), ord('z') + 1):
+        letterValue[x] = chr(c)
+        c += 1
+    for x in "+-.:":
+        letterValue[ord(x)] = chr(c)
+        c += 1
+initLetterValue()
+del initLetterValue
+
 class Version:
     """This class implements Debian version numbers."""
 
@@ -93,6 +108,10 @@
         while x is not None and x <> '':
             (nd, x) = non_digits.match(x).groups()
             (d, x) = digits.match(x).groups()
+            nd_l = []
+            for ch in nd:
+                nd_l.append(letterValue[ord(ch)])
+            nd = ''.join(nd_l)
             if d == '':
                 d = 0
             else:
@@ -414,6 +433,7 @@
     assert Version('0.9.2-5') < Version('0.9.2+cvs.1.0.dev.2004.07.28-1.5')
     assert Version('1:500') < Version('1:5000')
     assert Version('100:500') > Version('11:5000')
+    assert Version('1.0.4-2') > Version('1.0pre7-2')
 
     # Release
     assert internRelease('sarge') < internRelease('etch')




More information about the Secure-testing-commits mailing list