From 540e5669007a5f21b24bb8c63fd89756d0176866 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Tue, 25 Jun 2024 21:48:45 +0300 Subject: refactor(tvix/glue): take &CAHash, not CAHash We use a bit less cloning that way. Change-Id: I28bf99577e4a481e35fbf99d0724adab5502a1bd Reviewed-on: https://cl.tvl.fyi/c/depot/+/11874 Reviewed-by: Connor Brewster Tested-by: BuildkiteCI Reviewed-by: Ilan Joselevich --- tvix/glue/src/builtins/import.rs | 20 +++++++++++--------- tvix/glue/src/tvix_store_io.rs | 6 +++--- 2 files changed, 14 insertions(+), 12 deletions(-) (limited to 'tvix/glue') diff --git a/tvix/glue/src/builtins/import.rs b/tvix/glue/src/builtins/import.rs index 9257975a09d6..a3273eca15dc 100644 --- a/tvix/glue/src/builtins/import.rs +++ b/tvix/glue/src/builtins/import.rs @@ -284,27 +284,29 @@ mod import_builtins { } }; - let obtained_hash = ca_hash.hash().clone().into_owned(); let (path_info, _hash, output_path) = state.tokio_handle.block_on(async { state - .node_to_path_info(name.as_ref(), path.as_ref(), ca_hash, root_node) + .node_to_path_info(name.as_ref(), path.as_ref(), &ca_hash, root_node) .await })?; if let Some(expected_sha256) = expected_sha256 { - if obtained_hash != expected_sha256 { + if *ca_hash.hash() != expected_sha256 { Err(ImportError::HashMismatch( path.to_string_lossy().to_string(), expected_sha256, - obtained_hash, + ca_hash.hash().into_owned(), ))?; } } - let _: tvix_store::proto::PathInfo = state.tokio_handle.block_on(async { - // This is necessary to cause the coercion of the error type. - Ok::<_, std::io::Error>(state.path_info_service.as_ref().put(path_info).await?) - })?; + state + .tokio_handle + .block_on(async { state.path_info_service.as_ref().put(path_info).await }) + .map_err(|e| tvix_eval::ErrorKind::IO { + path: Some(path.to_path_buf()), + error: Rc::new(e.into()), + })?; // We need to attach context to the final output path. let outpath = output_path.to_absolute_path(); @@ -339,7 +341,7 @@ mod import_builtins { .register_node_in_path_info_service( name, &p, - CAHash::Nar(NixHash::Sha256(nar_sha256)), + &CAHash::Nar(NixHash::Sha256(nar_sha256)), root_node, ) .await diff --git a/tvix/glue/src/tvix_store_io.rs b/tvix/glue/src/tvix_store_io.rs index b0367f60aac7..4e5488067f8f 100644 --- a/tvix/glue/src/tvix_store_io.rs +++ b/tvix/glue/src/tvix_store_io.rs @@ -357,7 +357,7 @@ impl TvixStoreIO { &self, name: &str, path: &Path, - ca: CAHash, + ca: &CAHash, root_node: Node, ) -> io::Result<(PathInfo, NixHash, StorePath)> { // Ask the PathInfoService for the NAR size and sha256 @@ -372,7 +372,7 @@ impl TvixStoreIO { // Calculate the output path. This might still fail, as some names are illegal. let output_path = - nix_compat::store_path::build_ca_path(name, &ca, Vec::::new(), false).map_err( + nix_compat::store_path::build_ca_path(name, ca, Vec::::new(), false).map_err( |_| { std::io::Error::new( std::io::ErrorKind::InvalidData, @@ -399,7 +399,7 @@ impl TvixStoreIO { &self, name: &str, path: &Path, - ca: CAHash, + ca: &CAHash, root_node: Node, ) -> io::Result { let (path_info, _, output_path) = self.node_to_path_info(name, path, ca, root_node).await?; -- cgit 1.4.1