| Message ID | 20251222181527.2424323-1-anibal@limonsoftware.com |
|---|---|
| State | New |
| Headers | show |
| Series | bitbake-setup: _symlink_local fix case when update | expand |
On Mon, 22 Dec 2025 at 19:15, Anibal Limon <anibal@limonsoftware.com> wrote: > + if os.path.islink(dst): > + if not os.path.samefile(src, dst): > + logger.plain("Updating symbolic link {} pointing to {}".format(dst, src)) > + os.remove(src) > + do_symlink = True dst is the symlink, but os.remove is taking src parameter. Is that correct? > + else: > + logger.plain("Making a symbolic link {} pointing to {}".format(dst, src)) > + do_symlink = True > + > + if do_symlink: > + os.symlink(src, dst) Is this logic complete? It seems to cover the use case when one local path is replaced with another local path in a json config, or when local path is unchanged, but maybe we should cover the situation where a git checkout is replaced by a local source as well? This and the previous patch expose a gap in testing, perhaps status/update tests should be extended to cover local sources? Alex
On Mon, Dec 22, 2025 at 1:18 PM Alexander Kanavin <alex.kanavin@gmail.com> wrote: > On Mon, 22 Dec 2025 at 19:15, Anibal Limon <anibal@limonsoftware.com> > wrote: > > > + if os.path.islink(dst): > > + if not os.path.samefile(src, dst): > > + logger.plain("Updating symbolic link {} pointing to > {}".format(dst, src)) > > + os.remove(src) > > + do_symlink = True > > dst is the symlink, but os.remove is taking src parameter. Is that correct? > It is wrong, updating. > > > + else: > > + logger.plain("Making a symbolic link {} pointing to > {}".format(dst, src)) > > + do_symlink = True > > + > > + if do_symlink: > > + os.symlink(src, dst) > > Is this logic complete? It seems to cover the use case when one local > path is replaced with another local path in a json config, or when > local path is unchanged, but maybe we should cover the situation where > a git checkout is replaced by a local source as well? > Right, I think it should cover switching from local to remote or vice-versa too. I'm using local sources, on the manifest: ``` .... "ls-layers": { "local": { "path": "/home/workspaces/ls/meta-ls/layers'" } } ... ``` Then we run an update for a change on the manifest; it tries to make the symlink again and fails. > > This and the previous patch expose a gap in testing, perhaps > status/update tests should be extended to cover local sources? > Ack. I will look at the tests and send v2. > > Alex >
On Mon, 22 Dec 2025 at 20:53, Anibal Limon <anibal@limonsoftware.com> wrote: >> This and the previous patch expose a gap in testing, perhaps >> status/update tests should be extended to cover local sources? > > > Ack. I will look at the tests and send v2. Just wanted to give a heads-up that I'm working on a more extensive set of fixes and test coverage improvements that incorporates both of your patches. So you don't need to complete a v2, but reviewing my patchset would be appreciated. I'll follow up with a link once I send it out. Alex
On Wed, Dec 31, 2025 at 3:27 AM Alexander Kanavin <alex.kanavin@gmail.com> wrote: > On Mon, 22 Dec 2025 at 20:53, Anibal Limon <anibal@limonsoftware.com> > wrote: > > >> This and the previous patch expose a gap in testing, perhaps > >> status/update tests should be extended to cover local sources? > > > > > > Ack. I will look at the tests and send v2. > > Just wanted to give a heads-up that I'm working on a more extensive > set of fixes and test coverage improvements that incorporates both of > your patches. So you don't need to complete a v2, but reviewing my > patchset would be appreciated. I'll follow up with a link once I send > it out. > Thanks for the heads up, and feel free to cc me. Best!, Anibal > > Alex >
On Wed, 31 Dec 2025 at 15:43, Anibal Limon <anibal@limonsoftware.com> wrote: >> Just wanted to give a heads-up that I'm working on a more extensive >> set of fixes and test coverage improvements that incorporates both of >> your patches. So you don't need to complete a v2, but reviewing my >> patchset would be appreciated. I'll follow up with a link once I send >> it out. > Thanks for the heads up, and feel free to cc me. I just posted the set. Alex
diff --git a/bin/bitbake-setup b/bin/bitbake-setup index 1ea6796b5..378fbdc91 100755 --- a/bin/bitbake-setup +++ b/bin/bitbake-setup @@ -110,8 +110,19 @@ def checkout_layers(layers, layerdir, d): layers_fixed_revisions[r_name]['git-remote']['rev'] = revision def _symlink_local(src, dst): - logger.plain("Making a symbolic link {} pointing to {}".format(dst, src)) - os.symlink(src, dst) + do_symlink = False + + if os.path.islink(dst): + if not os.path.samefile(src, dst): + logger.plain("Updating symbolic link {} pointing to {}".format(dst, src)) + os.remove(src) + do_symlink = True + else: + logger.plain("Making a symbolic link {} pointing to {}".format(dst, src)) + do_symlink = True + + if do_symlink: + os.symlink(src, dst) layers_fixed_revisions = copy.deepcopy(layers) repodirs = []
When run an update with setup_dir containing a local symlinked source it fails because symlink already exists, so test for previous symlink existance and update it if not point to the same local source directory. Fixes, ``` $ bitbake-setup update --setup_dir /home/workspaces/ls/meta-ls/bitbake-setup/ls-master/stm32-toolchain ... Traceback (most recent call last): File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 1042, in <module> main() ~~~~^^ File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 1035, in main args.func(top_dir, all_settings, args, d) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 667, in build_update build_status(top_dir, settings, args, d, update=True) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 652, in build_status update_build(new_upstream_config, confdir, setupdir, layerdir, d, ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ update_bb_conf=args.update_bb_conf) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 340, in update_build sources_fixed_revisions = checkout_layers(layer_config, layerdir, d) File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 132, in checkout_layers _symlink_local(os.path.expanduser(r_local["path"]), os.path.join(layerdir,repodir)) ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/workspaces/ls/meta-ls/bitbake/bin/bitbake-setup", line 114, in _symlink_local os.symlink(src, dst) ~~~~~~~~~~^^^^^^^^^^ FileExistsError: [Errno 17] File exists: '/home/workspaces/ls/meta-ls/layers' -> '/home/workspaces/ls/meta-ls/bitbake-setup/ls-master/stm32-toolc hain/layers/ls-layers' ``` Signed-off-by: Anibal Limon <anibal@limonsoftware.com> --- bin/bitbake-setup | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)