Skip to contentSkip to conversation

Modified the vercmp() to meet Debian rules

PATCH New Lianhao Lu 1 participant 2 messages Apr 12, 2012

lore
Share & tools
lore

Lianhao Lu

author
#0 lore raw

cover Modified the vercmp() to meet Debian rules

As we investigated, the vercmp() in bitbake didn't meet the Debian rules, and is not compatible to what opkg expected. Detailed information could be find at http://lists.linuxtogo.org/pipermail/bitbake-devel/2012-April/002641.html.

This patch fixed the vercmp() to meet the Debian rules.

The following changes since commit 4219e2ea033232d95117211947b751bdb5efafd4:
Saul Wold (1):
hig/builder: use the new which_terminal() function

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib llu/vercmp_bitbake
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=llu/vercmp_bitbake

Lianhao Lu (1):
bb.utils: Modifed vercmp() to meet Debian rules.

 lib/bb/utils.py |   40 ++++++++++++++++------------------------
 1 files changed, 16 insertions(+), 24 deletions(-)
author
#1 lore raw

PATCH 1/1 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].

---
 lib/bb/utils.py |   40 ++++++++++++++++------------------------
 1 files changed, 16 insertions(+), 24 deletions(-)
lib/bb/utils.py +16 -24
index 21d3a81..1d98bca 100644
@@ -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
Signature · 1 line
1.7.0.4