refactor(tvix/nix-compat): Inline texthash
mod
It is moved into `store_path::utils` with the other path builders. Change-Id: I3257170e442af5d83bcf79e63fa7387dd914597c Reviewed-on: https://cl.tvl.fyi/c/depot/+/8410 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
ce502bdc89
commit
df78a4d24e
3 changed files with 40 additions and 44 deletions
|
@ -5,4 +5,3 @@ pub mod nixhash;
|
|||
mod nixhash_algos;
|
||||
mod nixhash_with_mode;
|
||||
pub mod store_path;
|
||||
mod texthash;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use crate::nixbase32;
|
||||
use crate::nixhash::NixHash;
|
||||
use crate::store_path::StorePath;
|
||||
use crate::texthash::text_hash_string;
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
use super::Error;
|
||||
|
@ -60,6 +60,45 @@ pub fn build_store_path_from_fingerprint(
|
|||
StorePath::from_string(format!("{}-{}", nixbase32::encode(&compressed), name).as_str())
|
||||
}
|
||||
|
||||
/// This contains the Nix logic to create "text hash strings", which are used
|
||||
/// in `builtins.toFile`, as well as in Derivation Path calculation.
|
||||
///
|
||||
/// A text hash is calculated by concatenating the following fields, separated by a `:`:
|
||||
///
|
||||
/// - text
|
||||
/// - references, individually joined by `:`
|
||||
/// - the nix_hash_string representation of the sha256 digest of some contents
|
||||
/// - the value of `storeDir`
|
||||
/// - the name
|
||||
pub fn text_hash_string<S: AsRef<str>, I: IntoIterator<Item = S>, C: AsRef<[u8]>>(
|
||||
name: &str,
|
||||
content: C,
|
||||
references: I,
|
||||
) -> String {
|
||||
let mut s = String::from("text:");
|
||||
|
||||
for reference in references {
|
||||
s.push_str(reference.as_ref());
|
||||
s.push(':');
|
||||
}
|
||||
|
||||
// the nix_hash_string representation of the sha256 digest of some contents
|
||||
s.push_str(
|
||||
&{
|
||||
let content_digest = {
|
||||
let hasher = Sha256::new_with_prefix(content);
|
||||
hasher.finalize()
|
||||
};
|
||||
NixHash::new(crate::nixhash::HashAlgo::Sha256, content_digest.to_vec())
|
||||
}
|
||||
.to_nix_hash_string(),
|
||||
);
|
||||
|
||||
s.push_str(&format!(":{}:{}", crate::store_path::STORE_DIR, name));
|
||||
|
||||
s
|
||||
}
|
||||
|
||||
/// Nix placeholders (i.e. values returned by `builtins.placeholder`)
|
||||
/// are used to populate outputs with paths that must be
|
||||
/// string-replaced with the actual placeholders later, at runtime.
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
use sha2::{Digest, Sha256};
|
||||
|
||||
use crate::{nixhash::NixHash, store_path};
|
||||
|
||||
/// This contains the Nix logic to create "text hash strings", which are used
|
||||
/// in `builtins.toFile`, as well as in Derivation Path calculation.
|
||||
///
|
||||
/// A text hash is calculated by concatenating the following fields, separated by a `:`:
|
||||
///
|
||||
/// - text
|
||||
/// - references, individually joined by `:`
|
||||
/// - the nix_hash_string representation of the sha256 digest of some contents
|
||||
/// - the value of `storeDir`
|
||||
/// - the name
|
||||
pub fn text_hash_string<S: AsRef<str>, I: IntoIterator<Item = S>, C: AsRef<[u8]>>(
|
||||
name: &str,
|
||||
content: C,
|
||||
references: I,
|
||||
) -> String {
|
||||
let mut s = String::from("text:");
|
||||
|
||||
for reference in references {
|
||||
s.push_str(reference.as_ref());
|
||||
s.push(':');
|
||||
}
|
||||
|
||||
// the nix_hash_string representation of the sha256 digest of some contents
|
||||
s.push_str(
|
||||
&{
|
||||
let content_digest = {
|
||||
let hasher = Sha256::new_with_prefix(content);
|
||||
hasher.finalize()
|
||||
};
|
||||
NixHash::new(crate::nixhash::HashAlgo::Sha256, content_digest.to_vec())
|
||||
}
|
||||
.to_nix_hash_string(),
|
||||
);
|
||||
|
||||
s.push_str(&format!(":{}:{}", store_path::STORE_DIR, name));
|
||||
|
||||
s
|
||||
}
|
Loading…
Reference in a new issue