feat(tvix/eval): implement builtins.path
Now, it supports almost everything except `recursive = false;`, i.e. `flat`-ingestion because we have no knob exposed in the tvix store import side to do it. This has been tested to work. Change-Id: I2e9da10ceccdfbf45b43c532077ed45d6306aa98 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10597 Tested-by: BuildkiteCI Autosubmit: raitobezarius <tvl@lahfa.xyz> Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
parent
14fe65a50b
commit
cecb5e295a
6 changed files with 367 additions and 31 deletions
|
|
@ -21,6 +21,7 @@ use tokio::io::AsyncReadExt;
|
|||
use tracing::{error, instrument, warn, Level};
|
||||
use tvix_build::buildservice::BuildService;
|
||||
use tvix_eval::{ErrorKind, EvalIO, FileType, StdIO};
|
||||
use tvix_store::utils::AsyncIoBridge;
|
||||
use walkdir::DirEntry;
|
||||
|
||||
use tvix_castore::{
|
||||
|
|
@ -341,6 +342,26 @@ impl TvixStoreIO {
|
|||
Ok(output_path)
|
||||
}
|
||||
|
||||
/// Transforms a BLAKE-3 digest into a SHA256 digest
|
||||
/// by re-hashing the whole file.
|
||||
pub(crate) async fn blob_to_sha256_hash(&self, blob_digest: B3Digest) -> io::Result<[u8; 32]> {
|
||||
let mut reader = self
|
||||
.blob_service
|
||||
.open_read(&blob_digest)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
io::Error::new(
|
||||
io::ErrorKind::NotFound,
|
||||
format!("blob represented by digest: '{}' not found", blob_digest),
|
||||
)
|
||||
})?;
|
||||
// It is fine to use `AsyncIoBridge` here because hashing is not actually I/O.
|
||||
let mut hasher = AsyncIoBridge(Sha256::new());
|
||||
|
||||
tokio::io::copy(&mut reader, &mut hasher).await?;
|
||||
Ok(hasher.0.finalize().into())
|
||||
}
|
||||
|
||||
pub async fn store_path_exists<'a>(&'a self, store_path: StorePathRef<'a>) -> io::Result<bool> {
|
||||
Ok(self
|
||||
.path_info_service
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue