refactor(nix-compat/store_path): add from_name_and_digest_fixed
Allow constructing a StorePath with a fixed-size digest. Change-Id: Id7d0b0152f6c55660a8973a02c84afa9188ce3ba Reviewed-on: https://cl.tvl.fyi/c/depot/+/11144 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: John Ericson <git@johnericson.me> Tested-by: BuildkiteCI
This commit is contained in:
parent
98e6936301
commit
142c72e070
2 changed files with 17 additions and 5 deletions
|
@ -215,10 +215,21 @@ impl<'a> StorePathRef<'a> {
|
|||
}
|
||||
|
||||
/// Construct a [StorePathRef] from a name and digest.
|
||||
/// The name is validated, and the digest checked for size.
|
||||
pub fn from_name_and_digest(name: &'a str, digest: &[u8]) -> Result<Self, Error> {
|
||||
let digest_fixed = digest.try_into().map_err(|_| Error::InvalidLength)?;
|
||||
Self::from_name_and_digest_fixed(name, digest_fixed)
|
||||
}
|
||||
|
||||
/// Construct a [StorePathRef] from a name and digest of correct length.
|
||||
/// The name is validated.
|
||||
pub fn from_name_and_digest_fixed(
|
||||
name: &'a str,
|
||||
digest: [u8; DIGEST_SIZE],
|
||||
) -> Result<Self, Error> {
|
||||
Ok(Self {
|
||||
name: validate_name(name.as_bytes())?,
|
||||
digest: digest.try_into().map_err(|_| Error::InvalidLength)?,
|
||||
digest,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use crate::nixbase32;
|
||||
use crate::nixhash::{CAHash, NixHash};
|
||||
use crate::store_path::{Error, StorePathRef, DIGEST_SIZE, STORE_DIR};
|
||||
use crate::store_path::{Error, StorePathRef, STORE_DIR};
|
||||
use data_encoding::HEXLOWER;
|
||||
use sha2::{Digest, Sha256};
|
||||
use thiserror;
|
||||
|
@ -154,10 +154,11 @@ fn build_store_path_from_fingerprint_parts<'a>(
|
|||
"{ty}:sha256:{}:{STORE_DIR}:{name}",
|
||||
HEXLOWER.encode(inner_digest)
|
||||
);
|
||||
let digest: [u8; DIGEST_SIZE] = compress_hash(&Sha256::new_with_prefix(fingerprint).finalize());
|
||||
|
||||
// name validation happens in here.
|
||||
StorePathRef::from_name_and_digest(name, &digest)
|
||||
StorePathRef::from_name_and_digest_fixed(
|
||||
name,
|
||||
compress_hash(&Sha256::new_with_prefix(fingerprint).finalize()),
|
||||
)
|
||||
}
|
||||
|
||||
/// This contains the Nix logic to create "text hash strings", which are used
|
||||
|
|
Loading…
Reference in a new issue