From 6e7f06d942a5e54d20d4441ff196ce3ffc99855a Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Tue, 17 Jan 2023 12:04:15 +0100 Subject: refactor(tvix/derivation): use DerivationError in Output::validate Change-Id: I7dbd3b8ff9ef92acddde2e579fb24b8311c34d8f Reviewed-on: https://cl.tvl.fyi/c/depot/+/7852 Tested-by: BuildkiteCI Reviewed-by: tazjin --- tvix/derivation/src/errors.rs | 12 +++++++++--- tvix/derivation/src/lib.rs | 2 +- tvix/derivation/src/output.rs | 9 ++++++--- tvix/derivation/src/validate.rs | 7 ++----- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/tvix/derivation/src/errors.rs b/tvix/derivation/src/errors.rs index baf1d6ca5398..75b101efddae 100644 --- a/tvix/derivation/src/errors.rs +++ b/tvix/derivation/src/errors.rs @@ -13,9 +13,8 @@ pub enum DerivationError { MoreThanOneOutputButFixed(), #[error("Invalid output name for fixed-output derivation: {0}.")] InvalidOutputNameForFixed(String), - #[error("Unable to parse path of output {0}: {1}.")] - InvalidOutputPath(String, ParseStorePathError), - + #[error("Unable to validate output {0}: {1}.")] + InvalidOutput(String, OutputError), // input derivation #[error("Unable to parse input derivation path {0}: {1}.")] InvalidInputDerivationPath(String, ParseStorePathError), @@ -42,3 +41,10 @@ pub enum DerivationError { #[error("Invalid environment key {0}")] InvalidEnvironmentKey(String), } + +/// Errors that can occur during the validation of a specific [Output] of a [Derviation]. +#[derive(Debug, Error)] +pub enum OutputError { + #[error("Invalid ouput path {0}: {1}")] + InvalidOutputPath(String, ParseStorePathError), +} diff --git a/tvix/derivation/src/lib.rs b/tvix/derivation/src/lib.rs index 6134ffb02a4c..01b7552a6f18 100644 --- a/tvix/derivation/src/lib.rs +++ b/tvix/derivation/src/lib.rs @@ -12,5 +12,5 @@ mod tests; // Public API of the crate. pub use derivation::Derivation; -pub use errors::DerivationError; +pub use errors::{DerivationError, OutputError}; pub use output::{Hash, Output}; diff --git a/tvix/derivation/src/output.rs b/tvix/derivation/src/output.rs index b8bd49fbbb18..982ac7c9eb79 100644 --- a/tvix/derivation/src/output.rs +++ b/tvix/derivation/src/output.rs @@ -1,5 +1,7 @@ use serde::{Deserialize, Serialize}; -use tvix_store::store_path::{ParseStorePathError, StorePath}; +use tvix_store::store_path::StorePath; + +use crate::OutputError; #[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)] pub struct Output { @@ -22,9 +24,10 @@ impl Output { self.hash.is_some() } - pub fn validate(&self) -> Result<(), ParseStorePathError> { + pub fn validate(&self) -> Result<(), OutputError> { + // TODO: add validation for hash, hashAlgo if let Err(e) = StorePath::from_absolute_path(&self.path) { - return Err(e); + return Err(OutputError::InvalidOutputPath(self.path.to_string(), e)); } Ok(()) } diff --git a/tvix/derivation/src/validate.rs b/tvix/derivation/src/validate.rs index 65809ef5e5f3..a2143509011b 100644 --- a/tvix/derivation/src/validate.rs +++ b/tvix/derivation/src/validate.rs @@ -39,11 +39,8 @@ impl Derivation { } if let Err(e) = output.validate() { - return Err(DerivationError::InvalidOutputPath( - output_name.to_string(), - e, - )); - }; + return Err(DerivationError::InvalidOutput(output_name.to_string(), e)); + } } // Validate all input_derivations -- cgit 1.4.1