[kernel] r10712 - in people/waldi/dkt/lib/dkt/support: . test

Bastian Blank waldi at alioth.debian.org
Wed Mar 5 13:34:46 UTC 2008


Author: waldi
Date: Wed Mar  5 13:34:45 2008
New Revision: 10712

Log:
lib/dkt/support/test, lib/dkt/support/version.py: Add.


Added:
   people/waldi/dkt/lib/dkt/support/test/
   people/waldi/dkt/lib/dkt/support/test/__init__.py
   people/waldi/dkt/lib/dkt/support/test/test_version.py
   people/waldi/dkt/lib/dkt/support/version.py

Added: people/waldi/dkt/lib/dkt/support/test/__init__.py
==============================================================================

Added: people/waldi/dkt/lib/dkt/support/test/test_version.py
==============================================================================
--- (empty file)
+++ people/waldi/dkt/lib/dkt/support/test/test_version.py	Wed Mar  5 13:34:45 2008
@@ -0,0 +1,14 @@
+from dkt.support.version import *
+
+def test_image_cmp():
+    a = VersionImage("2.6.24")
+    b = VersionImage("2.6.24.1")
+    c = VersionImage("2.6.24-1")
+    d = VersionImage("2.6.24-rc1")
+
+    assert a == a
+    assert a != b
+    assert a < b
+    assert a < c
+    assert a > d
+

Added: people/waldi/dkt/lib/dkt/support/version.py
==============================================================================
--- (empty file)
+++ people/waldi/dkt/lib/dkt/support/version.py	Wed Mar  5 13:34:45 2008
@@ -0,0 +1,73 @@
+def _izip(*iterables):
+    iterables = map(iter, iterables)
+    while iterables:
+        done = True
+        result = []
+        for it in iterables:
+            try:
+                result.append(it.next())
+                done = False
+            except StopIteration:
+                result.append(None)
+        if done:
+            raise StopIteration()
+        yield tuple(result)
+
+class VersionImage(object):
+    def __init__(self, data):
+        self.data = data
+
+    def __repr__(self):
+        return '%s(%r)' % (self.__class__.__name__, self.data)
+
+    def __str__(self):
+        return self.data
+
+    def __cmp__(self, other):
+        it = _izip(self.data.split('-'), other.data.split('-'))
+
+        try:
+            ret = self._compare_version(*it.next())
+            if ret: return ret
+
+            ret = self._compare_modifier(*it.next())
+            if ret: return ret
+        except StopIteration:
+            return 0
+
+        return self._compare_extra(it)
+
+    @classmethod
+    def _compare_version(cls, self, other):
+        v_self = self.split('.')
+        v_other = other.split('.')
+
+        return cmp(v_self, v_other)
+
+    @classmethod
+    def _compare_modifier(cls, self, other):
+        weight_self = cls._compare_modifier_weight(self)
+        weight_other = cls._compare_modifier_weight(other)
+
+        ret = cmp(weight_self, weight_other)
+        if ret: return ret
+
+        return cmp(self, other)
+
+    @classmethod
+    def _compare_modifier_weight(cls, modifier):
+        import re
+        if modifier is None:
+            return 0
+        if re.match(r"^rc\d+", modifier):
+            return -50
+        return 0
+
+    @classmethod
+    def _compare_extra(cls, it):
+        for v_self, v_other in it:
+            ret = cmp(v_self, v_other)
+            if ret: return ret
+        return 0
+
+



More information about the Kernel-svn-changes mailing list