Onur found out this:
In [4]: a = Version("0.5.8-26-10")
In [5]: b = Version("0.5.8.1-30-29")
In [6]: a > b
Out[6]: True
...
was no separation between items. 26 > 1 and a wins.
This commit is contained in:
+21
-4
@@ -127,8 +127,17 @@ class VersionItem:
|
|||||||
class Version:
|
class Version:
|
||||||
|
|
||||||
def __init__(self, verstring):
|
def __init__(self, verstring):
|
||||||
|
# PiSi version policy does not allow "-" in version strings.
|
||||||
|
# They are special and used for build and release no separation.
|
||||||
|
if verstring.count("-") == 0:
|
||||||
|
(version, self.release, self.build) = (verstring, 0, 0)
|
||||||
|
elif verstring.count("-") == 1:
|
||||||
|
(version, self.release), self.build = (verstring.split("-"), 0)
|
||||||
|
else:
|
||||||
|
(version, self.release, self.build) = verstring.split("-")
|
||||||
|
|
||||||
self.comps = []
|
self.comps = []
|
||||||
for i in util.multisplit(verstring,'.-_'):
|
for i in util.multisplit(version,'._'):
|
||||||
# some version strings can contain ascii chars at the
|
# some version strings can contain ascii chars at the
|
||||||
# back. As an example: 2.11a
|
# back. As an example: 2.11a
|
||||||
# We split '11a' as two items like '11' and 'a'
|
# We split '11a' as two items like '11' and 'a'
|
||||||
@@ -146,7 +155,7 @@ class Version:
|
|||||||
def string(self):
|
def string(self):
|
||||||
return self.verstring
|
return self.verstring
|
||||||
|
|
||||||
def compare(self, rhs):
|
def compare(self, ver):
|
||||||
"""this comparison routine is essentially a comparison routine
|
"""this comparison routine is essentially a comparison routine
|
||||||
for two rationals in (0,1) interval. we compare two sequences
|
for two rationals in (0,1) interval. we compare two sequences
|
||||||
of digits one by one. We start with the leftmost digit
|
of digits one by one. We start with the leftmost digit
|
||||||
@@ -155,13 +164,21 @@ class Version:
|
|||||||
The result is, 0 if two are equal, -1 if self < rhs, and +1
|
The result is, 0 if two are equal, -1 if self < rhs, and +1
|
||||||
if self>rhs"""
|
if self>rhs"""
|
||||||
lhs = self.comps
|
lhs = self.comps
|
||||||
rhs = rhs.comps
|
rhs = ver.comps
|
||||||
# pad the short version string with zeros
|
# pad the short version string with zeros
|
||||||
if len(lhs) < len(rhs):
|
if len(lhs) < len(rhs):
|
||||||
lhs.extend( [VersionItem('0')] * (len(rhs) - len(lhs)) )
|
lhs.extend( [VersionItem('0')] * (len(rhs) - len(lhs)) )
|
||||||
elif len(lhs) > len(rhs):
|
elif len(lhs) > len(rhs):
|
||||||
rhs.extend( [VersionItem('0')] * (len(lhs) - len(rhs)) )
|
rhs.extend( [VersionItem('0')] * (len(lhs) - len(rhs)) )
|
||||||
# now let's iterate from left to right
|
# now let's iterate from left to right in version items
|
||||||
|
for (litem, ritem) in zip(lhs, rhs):
|
||||||
|
if litem < ritem:
|
||||||
|
return -1
|
||||||
|
elif litem > ritem:
|
||||||
|
return +1
|
||||||
|
# now let's compare release and build
|
||||||
|
lhs = (self.release, self.build)
|
||||||
|
rhs = (ver.release, ver.build)
|
||||||
for (litem, ritem) in zip(lhs, rhs):
|
for (litem, ritem) in zip(lhs, rhs):
|
||||||
if litem < ritem:
|
if litem < ritem:
|
||||||
return -1
|
return -1
|
||||||
|
|||||||
Reference in New Issue
Block a user