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:
parent
619f1fe88d
commit
a72a1044c2
3 changed files with 14 additions and 11 deletions
|
@ -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 =
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue