buildhistory_analysis: improve field handling robustness
Avoid errors when comparing changes for KEY = value files (package info files and image-info.txt): * Handle keys appearing and disappearing - this will help to handle PE in package info files (which is only written when it is not blank) and when we add additional fields in future. * Handle when old value is 0 for numeric field (avoid division by zero) * Report when numeric field was empty or missing rather than 0 (but still treat it as 0 for comparison purposes) (From OE-Core rev: 255d4bbf4d1e430d45f5fafb7d1c77d9ea67e174) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
c1cebf6a2b
commit
5cf28333a7
|
@ -40,10 +40,13 @@ class ChangeRecord:
|
|||
added = list(set(bitems) - set(aitems))
|
||||
return '%s: %s:%s%s' % (self.path, self.fieldname, ' removed "%s"' % ' '.join(removed) if removed else '', ' added "%s"' % ' '.join(added) if added else '')
|
||||
elif self.fieldname in numeric_fields:
|
||||
aval = int(self.oldvalue)
|
||||
bval = int(self.newvalue)
|
||||
percentchg = ((bval - aval) / float(aval)) * 100
|
||||
return '%s: %s changed from %d to %d (%s%d%%)' % (self.path, self.fieldname, aval, bval, '+' if percentchg > 0 else '', percentchg)
|
||||
aval = int(self.oldvalue or 0)
|
||||
bval = int(self.newvalue or 0)
|
||||
if aval != 0:
|
||||
percentchg = ((bval - aval) / float(aval)) * 100
|
||||
else:
|
||||
percentchg = 100
|
||||
return '%s: %s changed from %s to %s (%s%d%%)' % (self.path, self.fieldname, self.oldvalue or "''", self.newvalue or "''", '+' if percentchg > 0 else '', percentchg)
|
||||
elif self.fieldname in img_monitor_files:
|
||||
out = 'Changes to %s (%s):\n ' % (self.path, self.fieldname)
|
||||
if self.filechanges:
|
||||
|
@ -194,16 +197,22 @@ def compare_dict_blobs(path, ablob, bblob, report_all):
|
|||
bdict = blob_to_dict(bblob)
|
||||
|
||||
changes = []
|
||||
for key in adict:
|
||||
keys = list(set(adict.keys()) | set(bdict.keys()))
|
||||
for key in keys:
|
||||
if report_all or key in monitor_fields:
|
||||
if adict[key] != bdict[key]:
|
||||
astr = adict.get(key, '')
|
||||
bstr = bdict.get(key, '')
|
||||
if astr != bstr:
|
||||
if (not report_all) and key in numeric_fields:
|
||||
aval = int(adict[key])
|
||||
bval = int(bdict[key])
|
||||
percentchg = ((bval - aval) / float(aval)) * 100
|
||||
aval = int(astr or 0)
|
||||
bval = int(bstr or 0)
|
||||
if aval != 0:
|
||||
percentchg = ((bval - aval) / float(aval)) * 100
|
||||
else:
|
||||
percentchg = 100
|
||||
if percentchg < monitor_numeric_threshold:
|
||||
continue
|
||||
chg = ChangeRecord(path, key, adict[key], bdict[key])
|
||||
chg = ChangeRecord(path, key, astr, bstr)
|
||||
changes.append(chg)
|
||||
return changes
|
||||
|
||||
|
|
Loading…
Reference in New Issue