diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-06-25 19:09:52 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-09-16 12:32:18 +0200 |
commit | 3cc328a5f5857b95299d0ef998be5dcc3ddde6a7 (patch) | |
tree | af2945fe2dfdf111b766221f914538f32fbf20e9 | |
parent | 7902138f93e397c8a41f0699e970924916d613b0 (diff) |
Add passing of data for condition-check
This patch extends the interface for building the package DAG with a parameter
for the data that is required to check conditions for conditional dependencies.
A "DTO" type is added for this data.
The actual condition-checking is not implemented in this patch.
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | src/commands/build.rs | 8 | ||||
-rw-r--r-- | src/commands/tree_of.rs | 11 | ||||
-rw-r--r-- | src/package/dag.rs | 38 | ||||
-rw-r--r-- | src/package/dependency/condition.rs | 8 | ||||
-rw-r--r-- | src/package/dependency/mod.rs | 2 |
5 files changed, 59 insertions, 8 deletions
diff --git a/src/commands/build.rs b/src/commands/build.rs index d0e473b..8148a33 100644 --- a/src/commands/build.rs +++ b/src/commands/build.rs @@ -43,6 +43,7 @@ use crate::package::Dag; use crate::package::PackageName; use crate::package::PackageVersion; use crate::package::Shebang; +use crate::package::condition::ConditionData; use crate::repository::Repository; use crate::schema; use crate::source::SourceCache; @@ -226,7 +227,12 @@ pub async fn build( let dag = { let bar_tree_building = progressbars.bar(); - let dag = Dag::for_root_package(package.clone(), &repo, Some(&bar_tree_building))?; + let condition_data = ConditionData { + image_name: Some(&image_name), + env: &additional_env, + }; + + let dag = Dag::for_root_package(package.clone(), &repo, Some(&bar_tree_building), &condition_data)?; bar_tree_building.finish_with_message("Finished loading Dag"); dag }; diff --git a/src/commands/tree_of.rs b/src/commands/tree_of.rs index 6b297e3..f5ce223 100644 --- a/src/commands/tree_of.rs +++ b/src/commands/tree_of.rs @@ -20,7 +20,11 @@ use resiter::AndThen; use crate::package::Dag; use crate::package::PackageName; use crate::package::PackageVersionConstraint; +use crate::package::condition::ConditionData; use crate::repository::Repository; +use crate::util::EnvironmentVariableName; +use crate::util::docker::ImageName; +use crate::util::progress::ProgressBars; /// Implementation of the "tree_of" subcommand pub async fn tree_of( @@ -36,6 +40,11 @@ pub async fn tree_of( .map(PackageVersionConstraint::try_from) .transpose()?; + let condition_data = ConditionData { + image_name: None + env: &[], + }; + repo.packages() .filter(|p| pname.as_ref().map(|n| p.name() == n).unwrap_or(true)) .filter(|p| { @@ -44,7 +53,7 @@ pub async fn tree_of( .map(|v| v.matches(p.version())) .unwrap_or(true) }) - .map(|package| Dag::for_root_package(package.clone(), &repo, None)) + .map(|package| Dag::for_root_package(package.clone(), &repo, None, &condition_data)) .and_then_ok(|tree| { let stdout = std::io::stdout(); let mut outlock = stdout.lock(); diff --git a/src/package/dag.rs b/src/package/dag.rs index aea416c..e5dc840 100644 --- a/src/package/dag.rs +++ b/src/package/dag.rs @@ -25,6 +25,7 @@ use resiter::AndThen; use getset::Getters; use crate::package::Package; +use crate::package::condition::ConditionData; use crate::repository::Repository; #[derive(Debug, Getters)] @@ -41,6 +42,7 @@ impl Dag { p: Package, repo: &Repository, progress: Option<&ProgressBar>, + _conditional_data: &ConditionData<'_>, // required for selecting packages with conditional dependencies ) -> Result<Self> { fn add_sub_packages<'a>( repo: &'a Repository, @@ -182,7 +184,13 @@ mod tests { let repo = Repository::from(btree); let progress = ProgressBar::hidden(); - let r = Dag::for_root_package(p1, &repo, Some(&progress)); + let condition_data = ConditionData { + image_name: None, + env: &[], + }; + + let r = Dag::for_root_package(p1, &repo, Some(&progress), &condition_data); + assert!(r.is_ok()); } @@ -214,7 +222,12 @@ mod tests { let repo = Repository::from(btree); let progress = ProgressBar::hidden(); - let dag = Dag::for_root_package(p1, &repo, Some(&progress)); + let condition_data = ConditionData { + image_name: None, + env: &[], + }; + + let dag = Dag::for_root_package(p1, &repo, Some(&progress), &condition_data); assert!(dag.is_ok()); let dag = dag.unwrap(); let ps = dag.all_packages(); @@ -303,7 +316,12 @@ mod tests { let repo = Repository::from(btree); let progress = ProgressBar::hidden(); - let r = Dag::for_root_package(p1, &repo, Some(&progress)); + let condition_data = ConditionData { + image_name: None, + env: &[], + }; + + let r = Dag::for_root_package(p1, &repo, Some(&progress), &condition_data); assert!(r.is_ok()); let r = r.unwrap(); let ps = r.all_packages(); @@ -446,7 +464,12 @@ mod tests { let repo = Repository::from(btree); let progress = ProgressBar::hidden(); - let r = Dag::for_root_package(p1, &repo, Some(&progress)); + let condition_data = ConditionData { + image_name: None, + env: &[], + }; + + let r = Dag::for_root_package(p1, &repo, Some(&progress), &condition_data); assert!(r.is_ok()); let r = r.unwrap(); let ps = r.all_packages(); @@ -551,7 +574,12 @@ mod tests { let repo = Repository::from(btree); let progress = ProgressBar::hidden(); - let r = Dag::for_root_package(p1, &repo, Some(&progress)); + let condition_data = ConditionData { + image_name: None, + env: &[], + }; + + let r = Dag::for_root_package(p1, &repo, Some(&progress), &condition_data); assert!(r.is_ok()); let r = r.unwrap(); let ps = r.all_packages(); diff --git a/src/package/dependency/condition.rs b/src/package/dependency/condition.rs index a3eeaaf..81892c7 100644 --- a/src/package/dependency/condition.rs +++ b/src/package/dependency/condition.rs @@ -15,6 +15,7 @@ use serde::Serialize; use getset::Getters; use crate::util::EnvironmentVariableName; +use crate::util::docker::ImageName; /// The Condition type /// @@ -134,6 +135,13 @@ impl From<String> for OneOrMore<String> { } } + +#[derive(Debug)] +pub struct ConditionData<'a> { + pub(crate) image_name: Option<&'a ImageName>, + pub(crate) env: &'a [(EnvironmentVariableName, String)], +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/package/dependency/mod.rs b/src/package/dependency/mod.rs index e55dfc2..da80a85 100644 --- a/src/package/dependency/mod.rs +++ b/src/package/dependency/mod.rs @@ -24,7 +24,7 @@ pub use build::*; mod runtime; pub use runtime::*; -pub(self) mod condition; +pub mod condition; pub trait StringEqual { fn str_equal(&self, s: &str) -> bool; |