Message ID | 20240509110400.1093934-1-hieu2.nguyen@lge.com |
---|---|
State | New |
Headers | show |
Series | [v3] bitbake-layers: Support add-layer to prepend | expand |
This fails on the autbuilders: 2024-06-01 04:08:35,036 - oe-selftest - INFO - ====================================================================== 2024-06-01 04:08:35,195 - oe-selftest - INFO - FAIL: sstatetests.SStateBundles.test_minimal_bundle (subunit.RemotedTestCase) 2024-06-01 04:08:35,195 - oe-selftest - INFO - ---------------------------------------------------------------------- 2024-06-01 04:08:35,195 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last): File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/meta/lib/oeqa/selftest/cases/sstatetests.py", line 1016, in test_minimal_bundle runCmd("oe-replicate-build --targets {}".format(targets)) File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/meta/lib/oeqa/utils/commands.py", line 212, in runCmd raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, exc_output)) AssertionError: Command 'oe-replicate-build --targets core-image-minimal' returned non-zero exit status 1: Traceback (most recent call last): File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/bitbake/bin/bitbake-layers", line 101, in <module> ret = main() File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/bitbake/bin/bitbake-layers", line 94, in main return args.func(args) File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/meta/lib/bblayers/create.py", line 76, in do_create_layer ActionPlugin.do_add_layer(self, args) File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/bitbake/lib/bblayers/action.py", line 52, in do_add_layer notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None, None, args.prepend) AttributeError: 'Namespace' object has no attribute 'prepend' Making a self-extracting bundle archive in build-bundle.sh ... Traceback (most recent call last): File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/scripts/oe-replicate-build", line 74, in <module> _do_bundle(args) File "/home/pokybuild/yocto-worker/oe-selftest-centos/build/scripts/oe-replicate-build", line 29, in _do_bundle subprocess.check_output("bitbake-layers create-layer --add-layer {}".format(layerdir), shell=True, cwd=bundledir) File "/usr/lib64/python3.9/subprocess.py", line 424, in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, File "/usr/lib64/python3.9/subprocess.py", line 528, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command 'bitbake-layers create-layer --add-layer meta-build-config' returned non-zero exit status 1. On 09/05/2024 20:04:00+0900, Hieu Van Nguyen wrote: > From: Hieu Van Nguyen <hieu2.nguyen@lge.com> > > As you know, layer order in BBLAYERS can affect in parsing recipes process, > in some cases, users want to add a layer on the top of BBLAYERS variable > > So, add "--prepend" option for bitbake-layers to support add-layer to prepend > > Signed-off-by: Hieu Van Nguyen <hieu2.nguyen@lge.com> > --- > v3: fix From: > lib/bb/utils.py | 8 ++++++-- > lib/bblayers/action.py | 3 ++- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/lib/bb/utils.py b/lib/bb/utils.py > index ebee65d3d..f1634da0a 100644 > --- a/lib/bb/utils.py > +++ b/lib/bb/utils.py > @@ -1414,7 +1414,7 @@ def edit_metadata_file(meta_file, variables, varfunc): > return updated > > > -def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): > +def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None, prepend=None): > """Edit bblayers.conf, adding and/or removing layers > Parameters: > bblayers_conf: path to bblayers.conf file to edit > @@ -1424,6 +1424,7 @@ def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): > empty list to remove nothing > edit_cb: optional callback function that will be called after > processing adds/removes once per existing entry. > + prepend: optional support add-layer to prepend > Returns a tuple: > notadded: list of layers specified to be added but weren't > (because they were already in the list) > @@ -1484,7 +1485,10 @@ def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): > for addlayer in addlayers: > if addlayer not in bblayers: > updated = True > - bblayers.append(addlayer) > + if prepend: > + bblayers.insert(0,addlayer) > + else: > + bblayers.append(addlayer) > del addlayers[:] > > if edit_cb: > diff --git a/lib/bblayers/action.py b/lib/bblayers/action.py > index a14f19948..8ef89fc09 100644 > --- a/lib/bblayers/action.py > +++ b/lib/bblayers/action.py > @@ -49,7 +49,7 @@ class ActionPlugin(LayerPlugin): > shutil.copy2(bblayers_conf, backup) > > try: > - notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None) > + notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None, None, args.prepend) > if not (args.force or notadded): > self.tinfoil.modified_files() > try: > @@ -269,6 +269,7 @@ build results (as the layer priority order has effectively changed). > def register_commands(self, sp): > parser_add_layer = self.add_command(sp, 'add-layer', self.do_add_layer, parserecipes=False) > parser_add_layer.add_argument('layerdir', nargs='+', help='Layer directory/directories to add') > + parser_add_layer.add_argument('--prepend', action='store_true', help='Prepend layer directory/directories') > > parser_remove_layer = self.add_command(sp, 'remove-layer', self.do_remove_layer, parserecipes=False) > parser_remove_layer.add_argument('layerdir', nargs='+', help='Layer directory/directories to remove (wildcards allowed, enclose in quotes to avoid shell expansion)') > -- > 2.34.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#16196): https://lists.openembedded.org/g/bitbake-devel/message/16196 > Mute This Topic: https://lists.openembedded.org/mt/105998764/3617179 > Group Owner: bitbake-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/bitbake-devel/unsub [alexandre.belloni@bootlin.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Hi Alexandre, Sorry I didn't test with create new layer. I've uploaded new patch (v4). Please help to check and let me know if I need more tests. https://lists.openembedded.org/g/bitbake-devel/message/16302
diff --git a/lib/bb/utils.py b/lib/bb/utils.py index ebee65d3d..f1634da0a 100644 --- a/lib/bb/utils.py +++ b/lib/bb/utils.py @@ -1414,7 +1414,7 @@ def edit_metadata_file(meta_file, variables, varfunc): return updated -def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): +def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None, prepend=None): """Edit bblayers.conf, adding and/or removing layers Parameters: bblayers_conf: path to bblayers.conf file to edit @@ -1424,6 +1424,7 @@ def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): empty list to remove nothing edit_cb: optional callback function that will be called after processing adds/removes once per existing entry. + prepend: optional support add-layer to prepend Returns a tuple: notadded: list of layers specified to be added but weren't (because they were already in the list) @@ -1484,7 +1485,10 @@ def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None): for addlayer in addlayers: if addlayer not in bblayers: updated = True - bblayers.append(addlayer) + if prepend: + bblayers.insert(0,addlayer) + else: + bblayers.append(addlayer) del addlayers[:] if edit_cb: diff --git a/lib/bblayers/action.py b/lib/bblayers/action.py index a14f19948..8ef89fc09 100644 --- a/lib/bblayers/action.py +++ b/lib/bblayers/action.py @@ -49,7 +49,7 @@ class ActionPlugin(LayerPlugin): shutil.copy2(bblayers_conf, backup) try: - notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None) + notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None, None, args.prepend) if not (args.force or notadded): self.tinfoil.modified_files() try: @@ -269,6 +269,7 @@ build results (as the layer priority order has effectively changed). def register_commands(self, sp): parser_add_layer = self.add_command(sp, 'add-layer', self.do_add_layer, parserecipes=False) parser_add_layer.add_argument('layerdir', nargs='+', help='Layer directory/directories to add') + parser_add_layer.add_argument('--prepend', action='store_true', help='Prepend layer directory/directories') parser_remove_layer = self.add_command(sp, 'remove-layer', self.do_remove_layer, parserecipes=False) parser_remove_layer.add_argument('layerdir', nargs='+', help='Layer directory/directories to remove (wildcards allowed, enclose in quotes to avoid shell expansion)')