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
|
|
@ -1,4 +1,9 @@
|
|||
use std::sync::Arc;
|
||||
use std::{
|
||||
pin::Pin,
|
||||
task::{self, Poll},
|
||||
};
|
||||
use tokio::io::{self, AsyncWrite};
|
||||
|
||||
use tvix_castore::{
|
||||
blobservice::{self, BlobService},
|
||||
|
|
@ -33,3 +38,28 @@ pub async fn construct_services(
|
|||
|
||||
Ok((blob_service, directory_service, path_info_service))
|
||||
}
|
||||
|
||||
/// The inverse of [tokio_util::io::SyncIoBridge].
|
||||
/// Don't use this with anything that actually does blocking I/O.
|
||||
pub struct AsyncIoBridge<T>(pub T);
|
||||
|
||||
impl<W: std::io::Write + Unpin> AsyncWrite for AsyncIoBridge<W> {
|
||||
fn poll_write(
|
||||
self: Pin<&mut Self>,
|
||||
_cx: &mut task::Context<'_>,
|
||||
buf: &[u8],
|
||||
) -> Poll<io::Result<usize>> {
|
||||
Poll::Ready(self.get_mut().0.write(buf))
|
||||
}
|
||||
|
||||
fn poll_flush(self: Pin<&mut Self>, _cx: &mut task::Context<'_>) -> Poll<io::Result<()>> {
|
||||
Poll::Ready(self.get_mut().0.flush())
|
||||
}
|
||||
|
||||
fn poll_shutdown(
|
||||
self: Pin<&mut Self>,
|
||||
_cx: &mut task::Context<'_>,
|
||||
) -> Poll<Result<(), io::Error>> {
|
||||
Poll::Ready(Ok(()))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue