refactor(tvix/derivation): minor structure simplification
Fixes some module comments and embeds the `compress_hash` function in the `derivation` module, as it was not used outside of this module anyways. Change-Id: I6c5c92b3f0c03c2cdcbcfc2f813909a968c4d44c Reviewed-on: https://cl.tvl.fyi/c/depot/+/7905 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
parent
5719763fd3
commit
be7f64ac87
4 changed files with 27 additions and 18 deletions
|
@ -1,6 +1,6 @@
|
||||||
use crate::output::{Hash, Output};
|
use crate::output::{Hash, Output};
|
||||||
use crate::write;
|
use crate::write;
|
||||||
use crate::{nix_hash, DerivationError};
|
use crate::DerivationError;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
@ -29,6 +29,26 @@ pub struct Derivation {
|
||||||
pub system: String,
|
pub system: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// compress_hash takes an arbitrarily long sequence of bytes (usually
|
||||||
|
/// a hash digest), and returns a sequence of bytes of length
|
||||||
|
/// output_size.
|
||||||
|
///
|
||||||
|
/// It's calculated by rotating through the bytes in the output buffer
|
||||||
|
/// (zero- initialized), and XOR'ing with each byte of the passed
|
||||||
|
/// input. It consumes 1 byte at a time, and XOR's it with the current
|
||||||
|
/// value in the output buffer.
|
||||||
|
///
|
||||||
|
/// This mimics equivalent functionality in C++ Nix.
|
||||||
|
fn compress_hash(input: &[u8], output_size: usize) -> Vec<u8> {
|
||||||
|
let mut output: Vec<u8> = vec![0; output_size];
|
||||||
|
|
||||||
|
for (ii, ch) in input.iter().enumerate() {
|
||||||
|
output[ii % output_size] ^= ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
output
|
||||||
|
}
|
||||||
|
|
||||||
/// This returns a store path, either of a derivation or a regular output.
|
/// This returns a store path, either of a derivation or a regular output.
|
||||||
/// The path_hash is compressed to 20 bytes, and nixbase32-encoded (32 characters)
|
/// The path_hash is compressed to 20 bytes, and nixbase32-encoded (32 characters)
|
||||||
fn build_store_path(
|
fn build_store_path(
|
||||||
|
@ -36,7 +56,7 @@ fn build_store_path(
|
||||||
path_hash: &[u8],
|
path_hash: &[u8],
|
||||||
name: &str,
|
name: &str,
|
||||||
) -> Result<StorePath, DerivationError> {
|
) -> Result<StorePath, DerivationError> {
|
||||||
let compressed = nix_hash::compress_hash(path_hash, 20);
|
let compressed = compress_hash(path_hash, 20);
|
||||||
if is_derivation {
|
if is_derivation {
|
||||||
StorePath::from_string(
|
StorePath::from_string(
|
||||||
format!(
|
format!(
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
mod derivation;
|
mod derivation;
|
||||||
mod errors;
|
mod errors;
|
||||||
mod nix_hash;
|
|
||||||
mod output;
|
mod output;
|
||||||
mod string_escape;
|
mod string_escape;
|
||||||
mod validate;
|
mod validate;
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
/// CompressHash takes an arbitrary long sequence of bytes (usually a hash
|
|
||||||
/// digest), and returns a sequence of bytes of length output_size.
|
|
||||||
/// It's calculated by rotating through the bytes in the output buffer (zero-
|
|
||||||
/// initialized), and XOR'ing with each byte of the passed input.
|
|
||||||
/// It consumes 1 byte at a time, and XOR's it with the current value in the
|
|
||||||
/// output buffer.
|
|
||||||
pub fn compress_hash(input: &[u8], output_size: usize) -> Vec<u8> {
|
|
||||||
let mut output: Vec<u8> = vec![0; output_size];
|
|
||||||
|
|
||||||
for (ii, ch) in input.iter().enumerate() {
|
|
||||||
output[ii % output_size] ^= ch;
|
|
||||||
}
|
|
||||||
|
|
||||||
output
|
|
||||||
}
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
//! This module implements the serialisation of derivations into the
|
||||||
|
//! [ATerm][] format used by C++ Nix.
|
||||||
|
//!
|
||||||
|
//! [ATerm]: http://program-transformation.org/Tools/ATermFormat.html
|
||||||
|
|
||||||
use crate::output::Output;
|
use crate::output::Output;
|
||||||
use crate::string_escape::escape_string;
|
use crate::string_escape::escape_string;
|
||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
Loading…
Reference in a new issue