diff options
| -rw-r--r-- | meta/lib/oe/buildhistory_analysis.py | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/meta/lib/oe/buildhistory_analysis.py b/meta/lib/oe/buildhistory_analysis.py index c0fa339e36..a828f28421 100644 --- a/meta/lib/oe/buildhistory_analysis.py +++ b/meta/lib/oe/buildhistory_analysis.py | |||
| @@ -55,8 +55,7 @@ class ChangeRecord: | |||
| 55 | else: | 55 | else: |
| 56 | prefix = '' | 56 | prefix = '' |
| 57 | 57 | ||
| 58 | def pkglist_split(pkgs): | 58 | def pkglist_combine(depver): |
| 59 | depver = bb.utils.explode_dep_versions(pkgs) | ||
| 60 | pkglist = [] | 59 | pkglist = [] |
| 61 | for k,v in depver.iteritems(): | 60 | for k,v in depver.iteritems(): |
| 62 | if v: | 61 | if v: |
| @@ -67,8 +66,9 @@ class ChangeRecord: | |||
| 67 | 66 | ||
| 68 | if self.fieldname in list_fields or self.fieldname in list_order_fields: | 67 | if self.fieldname in list_fields or self.fieldname in list_order_fields: |
| 69 | if self.fieldname in ['RDEPENDS', 'RRECOMMENDS']: | 68 | if self.fieldname in ['RDEPENDS', 'RRECOMMENDS']: |
| 70 | aitems = pkglist_split(self.oldvalue) | 69 | (depvera, depverb) = compare_pkg_lists(self.oldvalue, self.newvalue) |
| 71 | bitems = pkglist_split(self.newvalue) | 70 | aitems = pkglist_combine(depvera) |
| 71 | bitems = pkglist_combine(depverb) | ||
| 72 | else: | 72 | else: |
| 73 | aitems = self.oldvalue.split() | 73 | aitems = self.oldvalue.split() |
| 74 | bitems = self.newvalue.split() | 74 | bitems = self.newvalue.split() |
| @@ -239,6 +239,45 @@ def compare_lists(alines, blines): | |||
| 239 | return filechanges | 239 | return filechanges |
| 240 | 240 | ||
| 241 | 241 | ||
| 242 | def split_version(s): | ||
| 243 | """Split a version string into its constituent parts (PE, PV, PR) | ||
| 244 | FIXME: this is a duplicate of a new function in bitbake/lib/bb/utils - | ||
| 245 | we should switch to that once we can bump the minimum bitbake version | ||
| 246 | """ | ||
| 247 | s = s.strip(" <>=") | ||
| 248 | e = 0 | ||
| 249 | if s.count(':'): | ||
| 250 | e = int(s.split(":")[0]) | ||
| 251 | s = s.split(":")[1] | ||
| 252 | r = "" | ||
| 253 | if s.count('-'): | ||
| 254 | r = s.rsplit("-", 1)[1] | ||
| 255 | s = s.rsplit("-", 1)[0] | ||
| 256 | v = s | ||
| 257 | return (e, v, r) | ||
| 258 | |||
| 259 | |||
| 260 | def compare_pkg_lists(astr, bstr): | ||
| 261 | depvera = bb.utils.explode_dep_versions(astr) | ||
| 262 | depverb = bb.utils.explode_dep_versions(bstr) | ||
| 263 | |||
| 264 | # Strip out changes where the version has increased | ||
| 265 | remove = [] | ||
| 266 | for k in depvera: | ||
| 267 | if k in depverb: | ||
| 268 | dva = depvera[k] | ||
| 269 | dvb = depverb[k] | ||
| 270 | if dva != dvb: | ||
| 271 | if bb.utils.vercmp(split_version(dva), split_version(dvb)) < 0: | ||
| 272 | remove.append(k) | ||
| 273 | |||
| 274 | for k in remove: | ||
| 275 | depvera.pop(k) | ||
| 276 | depverb.pop(k) | ||
| 277 | |||
| 278 | return (depvera, depverb) | ||
| 279 | |||
| 280 | |||
| 242 | def compare_dict_blobs(path, ablob, bblob, report_all): | 281 | def compare_dict_blobs(path, ablob, bblob, report_all): |
| 243 | adict = blob_to_dict(ablob) | 282 | adict = blob_to_dict(ablob) |
| 244 | bdict = blob_to_dict(bblob) | 283 | bdict = blob_to_dict(bblob) |
| @@ -259,6 +298,10 @@ def compare_dict_blobs(path, ablob, bblob, report_all): | |||
| 259 | if percentchg < monitor_numeric_threshold: | 298 | if percentchg < monitor_numeric_threshold: |
| 260 | continue | 299 | continue |
| 261 | elif (not report_all) and key in list_fields: | 300 | elif (not report_all) and key in list_fields: |
| 301 | if key in ['RDEPENDS', 'RRECOMMENDS']: | ||
| 302 | (depvera, depverb) = compare_pkg_lists(astr, bstr) | ||
| 303 | if depvera == depverb: | ||
| 304 | continue | ||
| 262 | alist = astr.split() | 305 | alist = astr.split() |
| 263 | alist.sort() | 306 | alist.sort() |
| 264 | blist = bstr.split() | 307 | blist = bstr.split() |
