From 6afe0e07ecc06aa6d2078e659970954beb639bef Mon Sep 17 00:00:00 2001 From: Mark Hatle Date: Thu, 30 Mar 2017 21:30:29 -0500 Subject: yocto-compat-layer.py: Fix the signature validation The initial signatures need to be collected -after- the dependency layers have been added to the system. Otherwise changes that happen due to dependencies, outside of the layer being scanned, will show up as signature problems. The add_layer function was split into two pieces so that we can process the dependencies first, and then add the layer itself for the comparison. (From OE-Core rev: 4eb0932e755b7cb582a8db811aeed1397ecb92cc) Signed-off-by: Mark Hatle Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- scripts/lib/compatlayer/__init__.py | 7 ++++--- scripts/yocto-compat-layer.py | 29 +++++++++++++++++++---------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/scripts/lib/compatlayer/__init__.py b/scripts/lib/compatlayer/__init__.py index 8d8bdfe939..86f86eb657 100644 --- a/scripts/lib/compatlayer/__init__.py +++ b/scripts/lib/compatlayer/__init__.py @@ -140,9 +140,7 @@ def _find_layer_depends(depend, layers): return layer return None -def add_layer(bblayersconf, layer, layers, logger): - logger.info('Adding layer %s' % layer['name']) - +def add_layer_dependencies(bblayersconf, layer, layers, logger): def recurse_dependencies(depends, layer, layers, logger, ret = []): logger.debug('Processing dependencies %s for layer %s.' % \ (depends, layer['name'])) @@ -192,7 +190,10 @@ def add_layer(bblayersconf, layer, layers, logger): logger.info('Adding layer dependency %s' % layer_depend['name']) with open(bblayersconf, 'a+') as f: f.write("\nBBLAYERS += \"%s\"\n" % layer_depend['path']) + return True +def add_layer(bblayersconf, layer, layers, logger): + logger.info('Adding layer %s' % layer['name']) with open(bblayersconf, 'a+') as f: f.write("\nBBLAYERS += \"%s\"\n" % layer['path']) diff --git a/scripts/yocto-compat-layer.py b/scripts/yocto-compat-layer.py index f8a1ac7468..22c0c2ddea 100755 --- a/scripts/yocto-compat-layer.py +++ b/scripts/yocto-compat-layer.py @@ -22,7 +22,7 @@ import scriptpath scriptpath.add_oe_lib_path() scriptpath.add_bitbake_lib_path() -from compatlayer import LayerType, detect_layers, add_layer, get_signatures +from compatlayer import LayerType, detect_layers, add_layer, add_layer_dependencies, get_signatures from oeqa.utils.commands import get_bb_vars PROGNAME = 'yocto-compat-layer' @@ -116,29 +116,38 @@ def main(): results = collections.OrderedDict() results_status = collections.OrderedDict() - logger.info('') - logger.info('Getting initial bitbake variables ...') - td['bbvars'] = get_bb_vars() - logger.info('Getting initial signatures ...') - td['builddir'] = builddir - td['sigs'] = get_signatures(td['builddir']) - logger.info('') - layers_tested = 0 for layer in layers: if layer['type'] == LayerType.ERROR_NO_LAYER_CONF or \ layer['type'] == LayerType.ERROR_BSP_DISTRO: continue + logger.info('') + logger.info("Setting up for %s(%s), %s" % (layer['name'], layer['type'], + layer['path'])) + shutil.copyfile(bblayersconf + '.backup', bblayersconf) - if not add_layer(bblayersconf, layer, dep_layers, logger): + if not add_layer_dependencies(bblayersconf, layer, dep_layers, logger): logger.info('Skipping %s due to missing dependencies.' % layer['name']) results[layer['name']] = None results_status[layer['name']] = 'SKIPPED (Missing dependencies)' layers_tested = layers_tested + 1 continue + logger.info('Getting initial bitbake variables ...') + td['bbvars'] = get_bb_vars() + logger.info('Getting initial signatures ...') + td['builddir'] = builddir + td['sigs'] = get_signatures(td['builddir']) + + if not add_layer(bblayersconf, layer, dep_layers, logger): + logger.info('Skipping %s ???.' % layer['name']) + results[layer['name']] = None + results_status[layer['name']] = 'SKIPPED (Unknown)' + layers_tested = layers_tested + 1 + continue + result = test_layer_compatibility(td, layer) results[layer['name']] = result results_status[layer['name']] = 'PASS' if results[layer['name']].wasSuccessful() else 'FAIL' -- cgit v1.2.3-54-g00ecf