mirror of
https://github.com/apple/pkl.git
synced 2026-01-13 15:13:38 +01:00
package resolve does not save packages in cache #126
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @StefMa on GitHub (Mar 28, 2024).
Right now resolving packages doesn't store packages in the cache.
This is in some situations problematic because "fully offline use" is not possible with the current implementation.
Except of the fact that it is also desired to cache packages to avoid unnecessary API calls.
Found out via this discussion.
See also this comment: https://github.com/apple/pkl/discussions/346#discussioncomment-8921705
@odenix commented on GitHub (Apr 3, 2024):
My understanding is that packages are always cached unless
--no-cacheis specified.Nevertheless, something like
pkl project resolve --downloadorpkl download-package(without arguments) could certainly be useful.@holzensp commented on GitHub (Apr 3, 2024):
Instead of adding a
--downloadargument, we're considering just always downloading (unless--no-cacheis specified).@odenix commented on GitHub (Apr 3, 2024):
Is there a benefit in keeping resolution and download decoupled? That was the idea behind
pkl download-packagewithout arguments. If resolution ever becomes non-deterministic, for example due to supporting some concept of “latest”, decoupling will be essential.@holzensp commented on GitHub (Apr 3, 2024):
We did discuss it. When using
pkl project resolve --no-cache, it would not download things. That does feel less that optimally discoverable, to be sure, but our thinking so far is that scenarios where download should actively be avoided are rare enough not to create a whole separate command for the downloading. Why would you saylatestwould make decoupling essential?latestwould only be newer-than-what-we-have-downloaded-in-cache when youresolve(not on a normaleval; otherwiselatestmeans you can never build without an internet connection).@odenix commented on GitHub (Apr 3, 2024):
It’s about actively avoiding resolution, not actively avoiding download. If all I want is to download, I should never have to worry about
PklProject.deps.jsonchanging as a side effect. According to the docs, thedownload-packagecommand already exists, so I’m not sure what you mean by “whole separate command”.@holzensp commented on GitHub (Apr 3, 2024):
Avoiding resolution is fair enough. We were debating whether
download-packageshould exist. Its current UI does not know aboutPklProject, through. This is whypkl download-packagedoes not (yet?) work to download all project packages. Some more thinking required, but points taken.@bioball commented on GitHub (Apr 3, 2024):
Good point about
pkl project resolvemaybe not being deterministic in the future. But, I don't think it relates to "pkl project resolveshould not populate the cache dir". Downloading dependencies is a matter of saving network I/O, and making subsequentpkl evalexecutions faster.If we do want to lean on this being the method for "I want to download all my project dependencies", we can maybe add a flag for "don't update already-resolved dependencies" in the future, if "latest" becomes a thing.
BTW: "I want to download all my dependencies" can also be a shell script:
@odenix commented on GitHub (Apr 3, 2024):
I guess I don’t mind if
pkl project resolvealso downloads packages, although I don’t really see the need either. I don’t think it saves much network I/O as packages will only be downloaded once in any case. Also, downloading as part of resolving won’t help all the other folks that didn’t run the resolve command themselves. Overall, not downloading by default feels more consistent with Pkl’s lazy attitude.My gut feeling is that there should be an easy way to download all package dependencies without resolving. If the
download-packagecommand is here to stay, I’d expect it to be capable of this.@bioball commented on GitHub (Apr 4, 2024):
The resolve command does need to download in order to build the resolved dependency list. Since it's already downloading, it's actually a little strange that it's not writing them to the cache dir.
Fair; I can definitely see a mode in
download-packagethat just downloads project dependencies. Maybe something like:pkl download-package --project=my-project/@odenix commented on GitHub (Apr 4, 2024):
Oh I thought that
pkl project resolvewould just download metadata. If it has to download the packages, it should definitely store them in the cache, at least by default.