summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-06-25 19:09:52 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-09-16 12:32:18 +0200
commit3cc328a5f5857b95299d0ef998be5dcc3ddde6a7 (patch)
treeaf2945fe2dfdf111b766221f914538f32fbf20e9
parent7902138f93e397c8a41f0699e970924916d613b0 (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.rs8
-rw-r--r--src/commands/tree_of.rs11
-rw-r--r--src/package/dag.rs38
-rw-r--r--src/package/dependency/condition.rs8
-rw-r--r--src/package/dependency/mod.rs2
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;