From 3c340b28bdc812b9c13393c9e2bb378ba7dd9ec8 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Sat, 2 Sep 2023 21:16:35 +0300 Subject: refactor(tvix/{cli,store}): move TvixStoreIO to tvix-cli crate This trait is eval-specific, there's no point in dealing with these things in tvix-store. This implements the EvalIO interface for a Tvix store. The proper place for this glue code (for now) is tvix-cli, which knows about both tvix-store and tvix-eval. There's one annoyance with this move: The `tvix-store import` subcommand previously also used the TvixStoreIO implementation (because it conveniently did what we wanted). Some of this code had to be duplicated, mostly logic to calculate the NAR-based output path and create the PathInfo object. Some, but potentially more of this can be extracted into helper functions in a shared crate, and then be used from both TvixStoreIO in tvix-cli as well as the tvix-store CLI entrypoint. Change-Id: Ia7515e83c1b54f95baf810fbd8414c5521382d40 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9212 Tested-by: BuildkiteCI Reviewed-by: tazjin Autosubmit: flokli --- tvix/nix-compat/src/store_path/utils.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'tvix/nix-compat/src') diff --git a/tvix/nix-compat/src/store_path/utils.rs b/tvix/nix-compat/src/store_path/utils.rs index 201d98cce460..ddece96e63f7 100644 --- a/tvix/nix-compat/src/store_path/utils.rs +++ b/tvix/nix-compat/src/store_path/utils.rs @@ -121,6 +121,18 @@ pub fn build_regular_ca_path, I: IntoIterator>( } } +/// For given NAR sha256 digest and name, return the new [StorePath] this would have. +pub fn build_nar_based_store_path(nar_sha256_digest: &[u8; 32], name: &str) -> StorePath { + // We populate the struct directly, as we know the sha256 digest has the + // right size. + let nar_hash_with_mode = NixHashWithMode::Recursive(NixHash { + algo: HashAlgo::Sha256, + digest: nar_sha256_digest.to_vec(), + }); + + build_regular_ca_path(name, &nar_hash_with_mode, Vec::::new(), false).unwrap() +} + /// This builds an input-addressed store path /// /// Input-addresed store paths are always derivation outputs, the "input" in question is the -- cgit 1.4.1