[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