From 2beabe968ca70ce2aef8def08d7dab7340979ea6 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Tue, 20 Aug 2024 16:52:07 +0300 Subject: refactor(nix-compat/store_path): make StorePath generic on S Similar to how cl/12253 already did this for `Signature`, we apply the same logic to `StorePath`. `StorePathRef<'a>'` is now a `StorePath<&'a str>`, and there's less redundant code for the two different implementation. `.as_ref()` returns a `StorePathRef<'_>`, `.to_owned()` gives a `StorePath` (for now). I briefly thought about only publicly exporting `StorePath` as `StorePath`, but the diff is not too large and this will make it easier to gradually introduce more flexibility in which store paths to accept. Also, remove some silliness in `StorePath::from_absolute_path_full`, which now doesn't allocate anymore. Change-Id: Ife8843857a1a0a3a99177ca997649fd45b8198e6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12258 Autosubmit: flokli Tested-by: BuildkiteCI Reviewed-by: Connor Brewster --- tvix/glue/src/builtins/derivation.rs | 2 +- tvix/glue/src/builtins/import.rs | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) (limited to 'tvix/glue/src/builtins') diff --git a/tvix/glue/src/builtins/derivation.rs b/tvix/glue/src/builtins/derivation.rs index 6a61b0dbaf36..5bc9dab71283 100644 --- a/tvix/glue/src/builtins/derivation.rs +++ b/tvix/glue/src/builtins/derivation.rs @@ -568,7 +568,7 @@ pub(crate) mod derivation_builtins { let blob_digest = blob_writer.close().await?; let ca_hash = CAHash::Text(Sha256::digest(&content).into()); - let store_path = + let store_path: StorePathRef = build_ca_path(name.to_str()?, &ca_hash, content.iter_ctx_plain(), false) .map_err(|_e| { nix_compat::derivation::DerivationError::InvalidOutputName( diff --git a/tvix/glue/src/builtins/import.rs b/tvix/glue/src/builtins/import.rs index 3660f575c843..34ae2778ecdd 100644 --- a/tvix/glue/src/builtins/import.rs +++ b/tvix/glue/src/builtins/import.rs @@ -112,7 +112,7 @@ mod import_builtins { use crate::tvix_store_io::TvixStoreIO; use nix_compat::nixhash::{CAHash, NixHash}; - use nix_compat::store_path::StorePath; + use nix_compat::store_path::StorePathRef; use sha2::Digest; use tokio::io::AsyncWriteExt; use tvix_eval::builtins::coerce_value_to_path; @@ -377,16 +377,16 @@ mod import_builtins { } })?; - let path_exists = if let Ok((store_path, sub_path)) = StorePath::from_absolute_path_full(p) - { - if !sub_path.as_os_str().is_empty() { - false + let path_exists = + if let Ok((store_path, sub_path)) = StorePathRef::from_absolute_path_full(p) { + if !sub_path.as_os_str().is_empty() { + false + } else { + state.store_path_exists(store_path.as_ref()).await? + } } else { - state.store_path_exists(store_path.as_ref()).await? - } - } else { - false - }; + false + }; if !path_exists { return Err(ImportError::PathNotInStore(p.into()).into()); -- cgit 1.4.1