refactor(tvix/glue): move nix_path handling to helper in tvix-glue

Change-Id: I2327560c4cf0d3f90e253e3c2f47cb29c762461e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9910
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
Autosubmit: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2023-11-03 14:03:19 +02:00 committed by clbot
parent 619f1fe88d
commit a72a1044c2
3 changed files with 14 additions and 11 deletions

View file

@ -2,8 +2,8 @@ use std::cell::RefCell;
use std::rc::Rc;
use std::sync::Arc;
use std::{fs, path::PathBuf};
use tvix_glue::add_derivation_builtins;
use tvix_glue::known_paths::KnownPaths;
use tvix_glue::{add_derivation_builtins, configure_nix_path};
use clap::Parser;
use rustyline::{error::ReadlineError, Editor};
@ -75,6 +75,7 @@ fn interpret(code: &str, path: Option<PathBuf>, args: &Args, explain: bool) -> b
let known_paths: Rc<RefCell<KnownPaths>> = Default::default();
add_derivation_builtins(&mut eval, known_paths.clone());
configure_nix_path(&mut eval, &args.nix_search_path);
let tokio_runtime = tokio::runtime::Runtime::new().unwrap();
eval.io_handle = Box::new(tvix_glue::tvix_io::TvixIO::new(
@ -87,14 +88,6 @@ fn interpret(code: &str, path: Option<PathBuf>, args: &Args, explain: bool) -> b
),
));
// bundle fetchurl.nix (used in nixpkgs) by resolving <nix> to
// `/__corepkgs__`, which has special handling in [`nix_compat`].
eval.nix_path = args
.nix_search_path
.as_ref()
.map(|p| format!("nix=/__corepkgs__:{}", p))
.or_else(|| Some("nix=/__corepkgs__".to_string()));
let source_map = eval.source_map();
let result = {
let mut compiler_observer =

View file

@ -26,3 +26,13 @@ pub fn add_derivation_builtins(
eval.src_builtins
.push(("derivation", include_str!("derivation.nix")));
}
/// 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(eval: &mut tvix_eval::Evaluation, 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()));
}

View file

@ -59,8 +59,8 @@ impl<T: EvalIO> EvalIO for TvixIO<T> {
fn read_to_string(&self, path: &Path) -> Result<String, io::Error> {
// Bundled version of corepkgs/fetchurl.nix. The counterpart
// of this happens in `main`, where the `nix_path` of the
// evaluation has `nix=/__corepkgs__` added to it.
// of this happens in [crate::configure_nix_path], where the `nix_path`
// of the evaluation has `nix=/__corepkgs__` added to it.
//
// This workaround is similar to what cppnix does for passing
// the path through.