feat(nix-compat/store_path): build_ca_path may fail
Change-Id: Ia74ee870f38b7966501458bace541092256c3213 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10509 Reviewed-by: raitobezarius <tvl@lahfa.xyz> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
20c98a51bf
commit
fdd7817aad
3 changed files with 18 additions and 5 deletions
|
@ -326,7 +326,12 @@ async fn import_path_with_pathinfo(
|
||||||
.to_str()
|
.to_str()
|
||||||
.expect("path must be valid unicode");
|
.expect("path must be valid unicode");
|
||||||
|
|
||||||
let output_path = store_path::build_nar_based_store_path(&nar_sha256, name);
|
let output_path = store_path::build_nar_based_store_path(&nar_sha256, name).map_err(|_| {
|
||||||
|
std::io::Error::new(
|
||||||
|
std::io::ErrorKind::InvalidData,
|
||||||
|
format!("invalid name: {}", name),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
// assemble a new root_node with a name that is derived from the nar hash.
|
// assemble a new root_node with a name that is derived from the nar hash.
|
||||||
let root_node = root_node.rename(output_path.to_string().into_bytes().into());
|
let root_node = root_node.rename(output_path.to_string().into_bytes().into());
|
||||||
|
|
|
@ -115,14 +115,14 @@ pub fn build_ca_path<'a, S: AsRef<str>, I: IntoIterator<Item = S>>(
|
||||||
}
|
}
|
||||||
|
|
||||||
/// For given NAR sha256 digest and name, return the new [StorePathRef] this
|
/// For given NAR sha256 digest and name, return the new [StorePathRef] this
|
||||||
/// would have.
|
/// would have, or an error, in case the name is invalid.
|
||||||
pub fn build_nar_based_store_path<'a>(
|
pub fn build_nar_based_store_path<'a>(
|
||||||
nar_sha256_digest: &[u8; 32],
|
nar_sha256_digest: &[u8; 32],
|
||||||
name: &'a str,
|
name: &'a str,
|
||||||
) -> StorePathRef<'a> {
|
) -> Result<StorePathRef<'a>, BuildStorePathError> {
|
||||||
let nar_hash_with_mode = CAHash::Nar(NixHash::Sha256(nar_sha256_digest.to_owned()));
|
let nar_hash_with_mode = CAHash::Nar(NixHash::Sha256(nar_sha256_digest.to_owned()));
|
||||||
|
|
||||||
build_ca_path(name, &nar_hash_with_mode, Vec::<String>::new(), false).unwrap()
|
build_ca_path(name, &nar_hash_with_mode, Vec::<String>::new(), false)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This builds an input-addressed store path.
|
/// This builds an input-addressed store path.
|
||||||
|
|
|
@ -283,8 +283,16 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let (nar_size, nar_sha256) =
|
let (nar_size, nar_sha256) =
|
||||||
path_info_service.calculate_nar(&root_node).await?;
|
path_info_service.calculate_nar(&root_node).await?;
|
||||||
|
|
||||||
|
// Calculate the output path. This might still fail, as some names are illegal.
|
||||||
let output_path =
|
let output_path =
|
||||||
store_path::build_nar_based_store_path(&nar_sha256, name);
|
store_path::build_nar_based_store_path(&nar_sha256, name).map_err(
|
||||||
|
|_| {
|
||||||
|
std::io::Error::new(
|
||||||
|
std::io::ErrorKind::InvalidData,
|
||||||
|
format!("invalid name: {}", name),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
// assemble a new root_node with a name that is derived from the nar hash.
|
// assemble a new root_node with a name that is derived from the nar hash.
|
||||||
let root_node =
|
let root_node =
|
||||||
|
|
Loading…
Reference in a new issue