We actually want to delay fetching until we actually need the file. A simple evaluation asking for `.outPath` or `.drvPath` should work even in a pure offline environment. Before this CL, the fetching logic was quite distributed between tvix_store_io, and builtins/fetchers.rs. Rather than having various functions and conversions between structs, describe a Fetch as an enum type, with the fields describing the fetch. Define a store_path() function on top of `Fetch` which can be used to ask for the calculated store path (if the digest has been provided upfront). Have a `Fetcher` struct, and give it a `fetch_and_persist` function, taking a `Fetch` as well as a desired name, and have it deal with all the logic of persisting the PathInfos. It also returns a StorePathRef, similar to the `.store_path()` method on a `Fetch` struct. In a followup CL, we can extend KnownPaths to track fetches AND derivations, and then use `Fetcher` when we need to do IO into that store path. Change-Id: Ib39a96baeb661750a8706b461f8ba4abb342e777 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11500 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
24 lines
654 B
Rust
24 lines
654 B
Rust
pub mod builtins;
|
|
pub mod fetchers;
|
|
pub mod known_paths;
|
|
pub mod refscan;
|
|
pub mod tvix_build;
|
|
pub mod tvix_io;
|
|
pub mod tvix_store_io;
|
|
|
|
mod decompression;
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
/// Tell the Evaluator to resolve `<nix>` to the path `/__corepkgs__`,
|
|
/// which has special handling in [tvix_io::TvixIO].
|
|
/// This is used in nixpkgs to import `fetchurl.nix` from `<nix>`.
|
|
pub fn configure_nix_path<IO>(
|
|
eval: &mut tvix_eval::Evaluation<IO>,
|
|
nix_search_path: &Option<String>,
|
|
) {
|
|
eval.nix_path = nix_search_path
|
|
.as_ref()
|
|
.map(|p| format!("nix=/__corepkgs__:{}", p))
|
|
.or_else(|| Some("nix=/__corepkgs__".to_string()));
|
|
}
|