checklayer: check layer in BBLAYERS before test

layer under test should absent from BBLAYERS when running
yocto-check-layer. This allow to get signatures before layer
under test. There are existing steps to add the layer under
test to BBLAYERS after getting initial signatures.

add steps to check for layer under test in BBLAYERS before
running any test, skip test for the layer if the layer under
test exist in BBLAYERS.

[YOCTO #13176]

(From OE-Core rev: be02e8dbfb0d1decce125322f9f1e11a649756c0)

Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Lee Chee Yang 2020-07-24 12:16:24 +08:00 committed by Richard Purdie
parent 9a0ec350ac
commit 4cbea10197
2 changed files with 22 additions and 1 deletions

View File

@ -229,6 +229,20 @@ def add_layers(bblayersconf, layers, logger):
f.write("\nBBLAYERS += \"%s\"\n" % path) f.write("\nBBLAYERS += \"%s\"\n" % path)
return True return True
def check_bblayers(bblayersconf, layer_path, logger):
'''
If layer_path found in BBLAYERS return True
'''
import bb.parse
import bb.data
ldata = bb.parse.handle(bblayersconf, bb.data.init(), include=True)
for bblayer in (ldata.getVar('BBLAYERS') or '').split():
if os.path.normpath(bblayer) == os.path.normpath(layer_path):
return True
return False
def check_command(error_msg, cmd, cwd=None): def check_command(error_msg, cmd, cwd=None):
''' '''
Run a command under a shell, capture stdout and stderr in a single stream, Run a command under a shell, capture stdout and stderr in a single stream,

View File

@ -24,7 +24,7 @@ import scriptpath
scriptpath.add_oe_lib_path() scriptpath.add_oe_lib_path()
scriptpath.add_bitbake_lib_path() scriptpath.add_bitbake_lib_path()
from checklayer import LayerType, detect_layers, add_layers, add_layer_dependencies, get_signatures from checklayer import LayerType, detect_layers, add_layers, add_layer_dependencies, get_signatures, check_bblayers
from oeqa.utils.commands import get_bb_vars from oeqa.utils.commands import get_bb_vars
PROGNAME = 'yocto-check-layer' PROGNAME = 'yocto-check-layer'
@ -138,6 +138,13 @@ def main():
layer['type'] == LayerType.ERROR_BSP_DISTRO: layer['type'] == LayerType.ERROR_BSP_DISTRO:
continue continue
if check_bblayers(bblayersconf, layer['path'], logger):
logger.info("%s already in %s. To capture initial signatures, layer under test should not present "
"in BBLAYERS. Please remove %s from BBLAYERS." % (layer['name'], bblayersconf, layer['name']))
results[layer['name']] = None
results_status[layer['name']] = 'SKIPPED (Layer under test should not present in BBLAYERS)'
continue
logger.info('') logger.info('')
logger.info("Setting up for %s(%s), %s" % (layer['name'], layer['type'], logger.info("Setting up for %s(%s), %s" % (layer['name'], layer['type'],
layer['path'])) layer['path']))