buildhistory_analysis: update to use explode_dep_versions2()
authorPaul Eggleton <paul.eggleton@linux.intel.com>
Wed, 3 Oct 2012 12:37:15 +0000 (13:37 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 3 Oct 2012 16:18:29 +0000 (17:18 +0100)
Handle where multiple version specifications are present for the same
dependency.

(From OE-Core rev: 1600c916ae410c57a783a5aa35abe07a3f673311)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/lib/oe/buildhistory_analysis.py

index a5a607e..ad57f00 100644 (file)
@@ -262,8 +262,8 @@ def compare_lists(alines, blines):
 
 
 def compare_pkg_lists(astr, bstr):
-    depvera = bb.utils.explode_dep_versions(astr)
-    depverb = bb.utils.explode_dep_versions(bstr)
+    depvera = bb.utils.explode_dep_versions2(astr)
+    depverb = bb.utils.explode_dep_versions2(bstr)
 
     # Strip out changes where the version has increased
     remove = []
@@ -271,8 +271,23 @@ def compare_pkg_lists(astr, bstr):
         if k in depverb:
             dva = depvera[k]
             dvb = depverb[k]
-            if dva and dvb and dva != dvb:
-                if bb.utils.vercmp(bb.utils.split_version(dva), bb.utils.split_version(dvb)) < 0:
+            if dva and dvb and len(dva) == len(dvb):
+                # Since length is the same, sort so that prefixes (e.g. >=) will line up
+                dva.sort()
+                dvb.sort()
+                removeit = True
+                for dvai, dvbi in zip(dva, dvb):
+                    if dvai != dvbi:
+                        aiprefix = dvai.split(' ')[0]
+                        biprefix = dvbi.split(' ')[0]
+                        if aiprefix == biprefix and aiprefix in ['>=', '=']:
+                            if bb.utils.vercmp(bb.utils.split_version(dvai), bb.utils.split_version(dvbi)) > 0:
+                                removeit = False
+                                break
+                        else:
+                            removeit = False
+                            break
+                if removeit:
                     remove.append(k)
 
     for k in remove: