diff --git a/tvix/glue/src/builtins/import.rs b/tvix/glue/src/builtins/import.rs index 9257975a0..a3273eca1 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 b0367f60a..4e5488067 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?; diff --git a/tvix/store/src/import.rs b/tvix/store/src/import.rs index 9d7a99558..70a97982e 100644 --- a/tvix/store/src/import.rs +++ b/tvix/store/src/import.rs @@ -81,7 +81,7 @@ pub fn path_to_name(path: &Path) -> std::io::Result<&str> { pub fn derive_nar_ca_path_info( nar_size: u64, nar_sha256: [u8; 32], - ca: Option, + ca: Option<&CAHash>, root_node: Node, ) -> PathInfo { // assemble the [crate::proto::PathInfo] object. @@ -145,7 +145,7 @@ where let path_info = derive_nar_ca_path_info( nar_size, nar_sha256, - Some(CAHash::Nar(NixHash::Sha256(nar_sha256))), + Some(&CAHash::Nar(NixHash::Sha256(nar_sha256))), root_node, );