fix(tvix/glue/tvix_store_io): also populate input sources

These also need to be present in the input nodes of the BuildRequest.

Change-Id: Ie9b957805e42f766002581adc6182a6543c5333b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11802
Reviewed-by: Brian Olsen <me@griff.name>
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
This commit is contained in:
Florian Klink 2024-06-13 15:22:37 +03:00 committed by clbot
parent c30fded880
commit b992ca49a6

View file

@ -188,7 +188,7 @@ impl TvixStoreIO {
// Provide them, which means, here is where we recursively build // Provide them, which means, here is where we recursively build
// all dependencies. // all dependencies.
#[allow(clippy::mutable_key_type)] #[allow(clippy::mutable_key_type)]
let input_nodes: BTreeSet<Node> = let mut input_nodes: BTreeSet<Node> =
futures::stream::iter(drv.input_derivations.iter()) futures::stream::iter(drv.input_derivations.iter())
.map(|(input_drv_path, output_names)| { .map(|(input_drv_path, output_names)| {
// look up the derivation object // look up the derivation object
@ -244,6 +244,27 @@ impl TvixStoreIO {
.try_collect() .try_collect()
.await?; .await?;
// add input sources
// FUTUREWORK: merge these who things together
#[allow(clippy::mutable_key_type)]
let input_nodes_input_sources: BTreeSet<Node> =
futures::stream::iter(drv.input_sources.iter())
.then(|input_source| {
Box::pin(async {
let node = self
.store_path_to_node(input_source, Path::new(""))
.await?;
if let Some(node) = node {
Ok(node)
} else {
Err(io::Error::other("no node produced"))
}
})
})
.try_collect()
.await?;
input_nodes.extend(input_nodes_input_sources);
span.pb_set_message(&format!("🔨Building {}", &store_path)); span.pb_set_message(&format!("🔨Building {}", &store_path));
// TODO: check if input sources are sufficiently dealth with, // TODO: check if input sources are sufficiently dealth with,
@ -261,7 +282,7 @@ impl TvixStoreIO {
.await .await
.map_err(|e| std::io::Error::new(io::ErrorKind::Other, e))?; .map_err(|e| std::io::Error::new(io::ErrorKind::Other, e))?;
// TODO: refscan? // TODO: refscan
// For each output, insert a PathInfo. // For each output, insert a PathInfo.
for output in &build_result.outputs { for output in &build_result.outputs {