diff options
author | Lianhao Lu <lianhao.lu@intel.com> | 2012-04-12 17:28:01 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-04-13 11:56:54 +0100 |
commit | 97b610c54c60b5a40fa7f6a09fa23ce17b38f93a (patch) | |
tree | 706cb250c7d8db5705c5c5a8f74a84b091f3bbbb /lib/bb/utils.py | |
parent | ad7f6bf3c7c4c15d546781aaefdaf03f00193f7c (diff) | |
download | bitbake-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.py | 40 |
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 |