feat(tvix/cli): Add derivation file dumping functionality

Provides a derivation file dumping functionality for tvix-cli that can
be used when passing the --drv-dumpdir CLI arg to tvix-cli.

This will dump all the known derivation files into the specified
directory, making it easier to debug derivation divergences between Tvix
generated drvs and the drvs generated by Nix.

Supersedes: https://cl.tvl.fyi/c/depot/+/11265

Change-Id: I0e10b26eba22032b84ac543af0d4150ad87aed3e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12192
Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
Ilan Joselevich 2024-08-12 00:02:16 +03:00 committed by clbot
parent fd64df0511
commit d2a80dda88
4 changed files with 49 additions and 2 deletions

View file

@ -129,6 +129,11 @@ impl KnownPaths {
.get(output_path)
.map(|(name, fetch)| (name.to_owned(), fetch.to_owned()))
}
/// Returns an iterator over all known derivations and their store path.
pub fn get_derivations(&self) -> impl Iterator<Item = (&StorePath, &Derivation)> {
self.derivations.iter().map(|(k, v)| (k, &v.1))
}
}
#[cfg(test)]
@ -269,5 +274,21 @@ mod tests {
);
}
#[test]
fn get_derivations_working() {
let mut known_paths = KnownPaths::default();
// Add BAR_DRV
known_paths.add_derivation(BAR_DRV_PATH.clone(), BAR_DRV.clone());
// We should be able to find BAR_DRV_PATH and BAR_DRV as a pair in get_derivations.
assert_eq!(
Some((&BAR_DRV_PATH.clone(), &BAR_DRV.clone())),
known_paths
.get_derivations()
.find(|(s, d)| (*s, *d) == (&BAR_DRV_PATH, &BAR_DRV))
);
}
// TODO: add test panicking about missing digest
}

View file

@ -67,7 +67,7 @@ pub struct TvixStoreIO {
>,
// Paths known how to produce, by building or fetching.
pub(crate) known_paths: RefCell<KnownPaths>,
pub known_paths: RefCell<KnownPaths>,
}
impl TvixStoreIO {