From 63047449d7ac5d92a50c67b5f14b0cce0da5ba81 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Sun, 14 May 2023 21:21:27 +0300 Subject: feat(tvix/cli): use TvixStoreIO instead of NixCompatIO This switches tvix-cli over from using `NixCompatIO` to `TvixStoreIO`. For now, we simply instantiate in-memory services instead of getting fancy with constructors inside tvix-store, but long-term, we might want to support some URI syntax, to make this configurable at runtime. nixpkgs eval tests might be fine (and fast!) with a purely in-memory backend, but other usages might involve talking to a local tvix-store over gRPC (using the gRPC client, either unix domain socket or even further away remote), or running tvix-store in "embedded" mode (using another client than the gRPC client). Change-Id: I509afd3dc5ce3f2d52b0fb7067748fab820e26ab Reviewed-on: https://cl.tvl.fyi/c/depot/+/8572 Autosubmit: flokli Reviewed-by: tazjin Tested-by: BuildkiteCI --- tvix/cli/Cargo.toml | 1 + tvix/cli/src/main.rs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'tvix/cli') diff --git a/tvix/cli/Cargo.toml b/tvix/cli/Cargo.toml index 1dd59a2329f7..676da02a07a2 100644 --- a/tvix/cli/Cargo.toml +++ b/tvix/cli/Cargo.toml @@ -9,6 +9,7 @@ path = "src/main.rs" [dependencies] nix-compat = { path = "../nix-compat" } +tvix-store = { path = "../store" } tvix-eval = { path = "../eval" } rustyline = "10.0.0" clap = { version = "4.0", features = ["derive", "env"] } diff --git a/tvix/cli/src/main.rs b/tvix/cli/src/main.rs index 9a81cff50863..c588472592cf 100644 --- a/tvix/cli/src/main.rs +++ b/tvix/cli/src/main.rs @@ -14,6 +14,9 @@ use known_paths::KnownPaths; use rustyline::{error::ReadlineError, Editor}; use tvix_eval::observer::{DisassemblingObserver, TracingObserver}; use tvix_eval::{Builtin, Value}; +use tvix_store::blobservice::MemoryBlobService; +use tvix_store::directoryservice::MemoryDirectoryService; +use tvix_store::pathinfoservice::MemoryPathInfoService; #[derive(Parser)] struct Args { @@ -63,9 +66,23 @@ fn interpret(code: &str, path: Option, args: &Args, explain: bool) -> b let known_paths: Rc> = Default::default(); eval.strict = args.strict; + + let blob_service = MemoryBlobService::default(); + let directory_service = MemoryDirectoryService::default(); + let path_info_service = MemoryPathInfoService::default(); + let nar_calculation_service = tvix_store::nar::NonCachingNARCalculationService::new( + blob_service.clone(), + directory_service.clone(), + ); + eval.io_handle = Box::new(tvix_io::TvixIO::new( known_paths.clone(), - nix_compat::NixCompatIO::new(), + tvix_store::TvixStoreIO::new( + blob_service, + directory_service, + path_info_service, + nar_calculation_service, + ), )); // bundle fetchurl.nix (used in nixpkgs) by resolving to -- cgit 1.4.1