On Wed, Feb 12, 2025 at 3:41 AM Stefan Herbrechtsmeier <
stefan.herbrechtsmeier-...@weidmueller.com> wrote:

> Am 12.02.2025 um 00:14 schrieb Bruce Ashfield via lists.openembedded.org:
>
> In message: [bitbake-devel] [RFC PATCH 00/30] Add vendor support for go, npm 
> and rust
> on 11/02/2025 Stefan Herbrechtsmeier via lists.openembedded.org wrote:
>
>
> From: Stefan Herbrechtsmeier <stefan.herbrechtsme...@weidmueller.com> 
> <stefan.herbrechtsme...@weidmueller.com>
>
> The series adds on-the-fly support for package manager specific
> dependencies and vendor directories. It contains the following changes:
> 1. Adds an early fetch, unpack and patch task to unpack and patch source
>    code with an embedded lock file for dependencies.
> 2. Parse the go.sum, Cargo.lock and package-lock.json lock files and
>    resolve the dependencies to SRC_URIs.
> 3. Save the SRC_URIs in a file and adapt all SRC_URIs users to handle
>    the SRC_URI files beside the SRC_URIs in the recipe.
>
> I made a few comments, and will have another / better look at the
> series tomorrow. There's a lot here, and it is hard to wrap my head
> around everything that is changing.
>
> I have one specific question below (from the point of view of go).
>
> I've been looking through the series, and can't pick out where #3 is
> done.
>
> The files are created in the package manager specific vendor classes (17 -
> 19) in the do_vendor_resolve task. The parsing is implemented in the
> package manager specific modules in the vendor package (6-8).
>
>
aha. I'll have a closer look in a bit!



>  I see patch 14 using SRC_URI_FILES, but where are those files
> written ? Is that in patch 18 (vendor_go_do_vendor_resolve ?)  What is
> written to those files ?
>
> The file is written into the vendor directory below WORKDIR. The approach
> is similar to other classes which need to share data between tasks.
>
> The files contain individual SRC_URIs per line.
>
I may have missed that in the patches, but if that isn't described in the
commit logs, then
that description would be a nice addition. Along with a high level
description for each
supported language package manager about what is in the files and what uses
it to
resolve the dependencies.


> The concept that I'm not understanding (and that's just me not being
> familiar with things, I'll continue reading the series) is that when
> we suggested we'd like to have a mode where the dependencies could
> clearly be listed in the SRC_URI, at least I was just thinking about a
> way run the fetch/module elements that you were adding, write them to
> a file and then have the recipe include it.
>
> The additional SRC_URIs are dynamically added to the recipe without the
> indirection over an include file. The generated SRC_URIs could be inspected
> via the SRC_URI_FILES and manipulated via patches for the lock files or an
> separated lock file.
>
The issue with patching those dynamic files .. is just that, they are
dynamic and
they could be regenerated (but hopefully without a SRCREV change they are
identically
generated each time, so maybe it isn't a big deal) and patching could fail.
Much like we
don't patch generated automake files, we patch the .am and .in files that
generate the
outputs.

>
> I can't tell if in the series those files are written each time, and
> that there would be no way to edit those SRC_URI_FILES .. but I'll
> look again tomorrow.
>
> The files are written if the do_vendor_resolve task need to be rerun. It
> isn't possible to edit the generated SRC_URIs. Instead the lock file could
> be patched.
>

ok. So they are really just a way to dump what is being built to disk and
out of "memory",
it really isn't what I was looking for, but at least I understand what you
were trying to
do with the writing and later use of the files now.

I was hoping for something that I could include "statically" (for lack of a
better term) in my
recipes, and then have the handlers for the protocols do the fetching ..
again, much like
the crate:// fetches in the .inc files.

To be clear, I'm not suggesting that mode would be the only mode, just that
the way the
generation of the fetches -> actual fetching was constructed such that I
could avoid
"short circuit" the handling of the lock file and simply list the
dependencies for fetching
(much like how I can go get all of the SRCREVS for a gitsm:// fetch, and
put them into
my recipes as pure git:// fetches if I'm having issues with the git
submodles).

That file would manipulate the standard SRC_URI. In other words still
> support a mode that is like the .inc files with crate://. So someone
> could either have the lockfile parsed and fetched, or have a way to
> run the parsing and fetching via a task, write a file and include the
> file in their recipe to short circuit the processing of the lockfile.
> (meaning the expanded and end fetches that are done once you've
> processed the file are simply listed as a series of fetches that are
> carried out without extra processing .. and "unrolled" dependency
> file pointing at the "sources" git, crate, mod, whatever)
>
> What is the motivation "to short circuit the processing of the lockfile"?
> Like any task the processing and its output are cached via the sstate cache.
>

See above. It isn't about re-running it a later time and re-using the
artifacts, it is about
having a way to make sure nothing is dynamically resolved when bitbake
<foo> is called,
just fetch and the rest of the standard tasks.

>
> It is possible to use the vendor package to create a include file but we
> should have good reasons to support two solutions for the same problem.
>
> If that just doesn't make sense, then if there was a way to copy
> the lockfile out of the recipe and have it overlayed onto the fetched
> one .. maybe breaking out the individual fetch lines isn't required,
> since they could be individually manipulated in that lockfile.
>
> I haven't test it but this should be possible. You can place a lock file
> beside the recipe, add it to the SRC_URI and change the XXX_LOCK_PATH.
>

Something like that is a big step towards having that finer grained control
in a recipe that
I'm looking for. I'd still like some sort of line by line "dumped
dependency list" if there's a
lower level protocol at play (but the lock file really also is just that
line by line list for many
of the languages).

Bruce

> Regards Stefan
>


-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end
- "Use the force Harry" - Gandalf, Star Trek II
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#211233): 
https://lists.openembedded.org/g/openembedded-core/message/211233
Mute This Topic: https://lists.openembedded.org/mt/111133313/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to