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 12:04:19 +0100 |
commit | 811f7d8ebfe9d55b0244d8284a04b0ef6902adbb (patch) | |
tree | 8b55d6ef24a0051ee3378460925a90b52f8a831e | |
parent | 4997801bad7ae2a43221dd58151c8f2facd03210 (diff) | |
download | poky-811f7d8ebfe9d55b0244d8284a04b0ef6902adbb.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].
(Bitbake rev: 97b610c54c60b5a40fa7f6a09fa23ce17b38f93a)
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/utils.py | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 21d3a812d3..1d98bca6ce 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
@@ -31,9 +31,6 @@ from contextlib import contextmanager | |||
31 | 31 | ||
32 | logger = logging.getLogger("BitBake.Util") | 32 | logger = logging.getLogger("BitBake.Util") |
33 | 33 | ||
34 | # Version comparison | ||
35 | separators = ".-" | ||
36 | |||
37 | # Context used in better_exec, eval | 34 | # Context used in better_exec, eval |
38 | _context = { | 35 | _context = { |
39 | "os": os, | 36 | "os": os, |
@@ -48,15 +45,18 @@ def explode_version(s): | |||
48 | while (s != ''): | 45 | while (s != ''): |
49 | if s[0] in string.digits: | 46 | if s[0] in string.digits: |
50 | m = numeric_regexp.match(s) | 47 | m = numeric_regexp.match(s) |
51 | r.append(int(m.group(1))) | 48 | r.append((0, int(m.group(1)))) |
52 | s = m.group(2) | 49 | s = m.group(2) |
53 | continue | 50 | continue |
54 | if s[0] in string.letters: | 51 | if s[0] in string.letters: |
55 | m = alpha_regexp.match(s) | 52 | m = alpha_regexp.match(s) |
56 | r.append(m.group(1)) | 53 | r.append((1, m.group(1))) |
57 | s = m.group(2) | 54 | s = m.group(2) |
58 | continue | 55 | continue |
59 | r.append(s[0]) | 56 | if s[0] == '~': |
57 | r.append((-1, s[0])) | ||
58 | else: | ||
59 | r.append((2, s[0])) | ||
60 | s = s[1:] | 60 | s = s[1:] |
61 | return r | 61 | return r |
62 | 62 | ||
@@ -77,33 +77,25 @@ def split_version(s): | |||
77 | def vercmp_part(a, b): | 77 | def vercmp_part(a, b): |
78 | va = explode_version(a) | 78 | va = explode_version(a) |
79 | vb = explode_version(b) | 79 | vb = explode_version(b) |
80 | sa = False | ||
81 | sb = False | ||
82 | while True: | 80 | while True: |
83 | if va == []: | 81 | if va == []: |
84 | ca = None | 82 | (oa, ca) = (0, None) |
85 | else: | 83 | else: |
86 | ca = va.pop(0) | 84 | (oa, ca) = va.pop(0) |
87 | if vb == []: | 85 | if vb == []: |
88 | cb = None | 86 | (ob, cb) = (0, None) |
89 | else: | 87 | else: |
90 | cb = vb.pop(0) | 88 | (ob, cb) = vb.pop(0) |
91 | if ca == None and cb == None: | 89 | if (oa, ca) == (0, None) and (ob, cb) == (0, None): |
92 | return 0 | 90 | return 0 |
93 | 91 | if oa < ob: | |
94 | if isinstance(ca, basestring): | ||
95 | sa = ca in separators | ||
96 | if isinstance(cb, basestring): | ||
97 | sb = cb in separators | ||
98 | if sa and not sb: | ||
99 | return -1 | 92 | return -1 |
100 | if not sa and sb: | 93 | elif oa > ob: |
101 | return 1 | 94 | return 1 |
102 | 95 | elif ca < cb: | |
103 | if ca > cb: | ||
104 | return 1 | ||
105 | if ca < cb: | ||
106 | return -1 | 96 | return -1 |
97 | elif ca > cb: | ||
98 | return 1 | ||
107 | 99 | ||
108 | def vercmp(ta, tb): | 100 | def vercmp(ta, tb): |
109 | (ea, va, ra) = ta | 101 | (ea, va, ra) = ta |