From 95cad95b9333214df90d6002e51c7ae34910fa7e Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Mon, 16 Jan 2023 15:25:08 +0100 Subject: feat(tvix/derivation): make input_sources a BTreeSet These need to be sorted anyways, so let's use the correct data structure for it. Change-Id: I009c9989d7647dc1df716170f3680c981db6e4b2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7846 Autosubmit: flokli Tested-by: BuildkiteCI Reviewed-by: tazjin --- tvix/derivation/src/derivation.rs | 7 +++---- tvix/derivation/src/validate.rs | 10 +--------- tvix/derivation/src/write.rs | 2 +- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/tvix/derivation/src/derivation.rs b/tvix/derivation/src/derivation.rs index d1f46de8c5ee..1e2605f5b931 100644 --- a/tvix/derivation/src/derivation.rs +++ b/tvix/derivation/src/derivation.rs @@ -22,7 +22,7 @@ pub struct Derivation { pub input_derivations: BTreeMap>, #[serde(rename = "inputSrcs")] - pub input_sources: Vec, + pub input_sources: BTreeSet, pub outputs: BTreeMap, @@ -111,15 +111,14 @@ impl Derivation { let mut hasher = Sha256::new(); // collect the list of paths from input_sources and input_derivations - // into a sorted list, and join them by : + // into a (sorted, guaranteed by BTreeSet) list, and join them by : hasher.update(write::TEXT_COLON); - let concat_inputs: Vec = { + let concat_inputs: BTreeSet = { let mut inputs = self.input_sources.clone(); let input_derivation_keys: Vec = self.input_derivations.keys().cloned().collect(); inputs.extend(input_derivation_keys); - inputs.sort(); inputs }; diff --git a/tvix/derivation/src/validate.rs b/tvix/derivation/src/validate.rs index 5335f43636d3..e225bd2fdb07 100644 --- a/tvix/derivation/src/validate.rs +++ b/tvix/derivation/src/validate.rs @@ -61,16 +61,8 @@ impl Derivation { } // Validate all input_sources - for (i, input_source) in self.input_sources.iter().enumerate() { + for input_source in self.input_sources.iter() { StorePath::from_absolute_path(input_source)?; - - if i > 0 && self.input_sources[i - 1] >= *input_source { - bail!( - "invalid input source order: {} < {}", - input_source, - self.input_sources[i - 1], - ); - } } // validate platform diff --git a/tvix/derivation/src/write.rs b/tvix/derivation/src/write.rs index af8f50d9b104..daca5ece2194 100644 --- a/tvix/derivation/src/write.rs +++ b/tvix/derivation/src/write.rs @@ -118,7 +118,7 @@ pub fn write_input_derivations( pub fn write_input_sources( writer: &mut impl Write, - input_sources: &[String], + input_sources: &BTreeSet, ) -> Result<(), fmt::Error> { writer.write_char(COMMA)?; -- cgit 1.4.1