From e7dc42e30c76bf0fbb4d3cc019bbec675bac55fa Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 16 Nov 2025 23:44:30 +0000 Subject: [PATCH] oe-build-perf-report: relax metadata matching rules As the poky repository is no longer used, measurements are indexed using the oe-core commit. But as bitbake, oe-core and meta-yocto are now retrieved from separate gits, while measuring performances for a given branch at some time interval, we can get the same commit for oe-core but different ones for bitbake or meta-yocto. As a consequence, metadata associated with the same index (oe-core commit) might differ. To work around this, relax the equality checks for commit, commit_time and commit_count since they might no longer match. Ideally we'd group them into separate results but for now, treat them as being the same. [Based on work from Mathieu Dubois-Briand but fixed differently] Signed-off-by: Richard Purdie --- scripts/lib/build_perf/report.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/lib/build_perf/report.py b/scripts/lib/build_perf/report.py index f4e6a92e094..9f5e8a4a0e3 100644 --- a/scripts/lib/build_perf/report.py +++ b/scripts/lib/build_perf/report.py @@ -137,9 +137,12 @@ def results_xml_to_json(elem): def aggregate_metadata(metadata): """Aggregate metadata into one, basically a sanity check""" - mutable_keys = ('pretty_name', 'version_id') - def aggregate_obj(aggregate, obj, assert_str=True): + # A given OE-Core commit may point at different meta-yocto/bitbake commits so we have + # to ignore commit/commit_count/commit_time differences + mutable_keys = ('pretty_name', 'version_id', 'commit', 'commit_count', 'commit_time') + + def aggregate_obj(aggregate, obj, assert_obj=True): """Aggregate objects together""" assert type(aggregate) is type(obj), \ "Type mismatch: {} != {}".format(type(aggregate), type(obj)) @@ -151,7 +154,7 @@ def aggregate_metadata(metadata): assert len(aggregate) == len(obj) for i, val in enumerate(obj): aggregate_obj(aggregate[i], val) - elif not isinstance(obj, str) or (isinstance(obj, str) and assert_str): + elif assert_obj: assert aggregate == obj, "Data mismatch {} != {}".format(aggregate, obj) if not metadata: -- 2.47.3