aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb/utils.py
diff options
context:
space:
mode:
authorLianhao Lu <lianhao.lu@intel.com>2012-04-12 17:28:01 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-04-13 11:56:54 +0100
commit97b610c54c60b5a40fa7f6a09fa23ce17b38f93a (patch)
tree706cb250c7d8db5705c5c5a8f74a84b091f3bbbb /lib/bb/utils.py
parentad7f6bf3c7c4c15d546781aaefdaf03f00193f7c (diff)
downloadbitbake-97b610c54c60b5a40fa7f6a09fa23ce17b38f93a.tar.gz
bb.utils: Modifed vercmp() to meet Debian rules.
The version compare function vercmp() was not exatcly conforming to Debian rules, e.g. it reported 'r1' > 'r1.1' but the Debian rules says 'r1' < 'r1.1'; it didn't support the "~" either. Modified the vercmp() to meet Debian rules, so that it's compatible to the rules used in opkg. This part of the buf fixing of [YOCTO #2233]. Signed-off-by: Lianhao Lu <lianhao.lu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/utils.py')
-rw-r--r--lib/bb/utils.py40
1 files changed, 16 insertions, 24 deletions
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index 21d3a812d..1d98bca6c 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -31,9 +31,6 @@ from contextlib import contextmanager
logger = logging.getLogger("BitBake.Util")
-# Version comparison
-separators = ".-"
-
# Context used in better_exec, eval
_context = {
"os": os,
@@ -48,15 +45,18 @@ def explode_version(s):
while (s != ''):
if s[0] in string.digits:
m = numeric_regexp.match(s)
- r.append(int(m.group(1)))
+ r.append((0, int(m.group(1))))
s = m.group(2)
continue
if s[0] in string.letters:
m = alpha_regexp.match(s)
- r.append(m.group(1))
+ r.append((1, m.group(1)))
s = m.group(2)
continue
- r.append(s[0])
+ if s[0] == '~':
+ r.append((-1, s[0]))
+ else:
+ r.append((2, s[0]))
s = s[1:]
return r
@@ -77,33 +77,25 @@ def split_version(s):
def vercmp_part(a, b):
va = explode_version(a)
vb = explode_version(b)
- sa = False
- sb = False
while True:
if va == []:
- ca = None
+ (oa, ca) = (0, None)
else:
- ca = va.pop(0)
+ (oa, ca) = va.pop(0)
if vb == []:
- cb = None
+ (ob, cb) = (0, None)
else:
- cb = vb.pop(0)
- if ca == None and cb == None:
+ (ob, cb) = vb.pop(0)
+ if (oa, ca) == (0, None) and (ob, cb) == (0, None):
return 0
-
- if isinstance(ca, basestring):
- sa = ca in separators
- if isinstance(cb, basestring):
- sb = cb in separators
- if sa and not sb:
+ if oa < ob:
return -1
- if not sa and sb:
+ elif oa > ob:
return 1
-
- if ca > cb:
- return 1
- if ca < cb:
+ elif ca < cb:
return -1
+ elif ca > cb:
+ return 1
def vercmp(ta, tb):
(ea, va, ra) = ta