summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/package/mod.rs4
-rw-r--r--src/package/package.rs19
-rw-r--r--src/package/tree.rs15
3 files changed, 27 insertions, 11 deletions
diff --git a/src/package/mod.rs b/src/package/mod.rs
index 448a22d..1f9dc82 100644
--- a/src/package/mod.rs
+++ b/src/package/mod.rs
@@ -9,3 +9,7 @@ pub use loader::*;
mod tree;
pub use tree::*;
+
+mod version;
+pub use version::*;
+
diff --git a/src/package/package.rs b/src/package/package.rs
index b8c584f..8e2cf58 100644
--- a/src/package/package.rs
+++ b/src/package/package.rs
@@ -5,9 +5,14 @@ use url::Url;
use getset::Getters;
use serde::Deserialize;
use anyhow::Result;
+use anyhow::Error;
+use anyhow::Context;
+use resiter::AndThen;
use crate::phase::{PhaseName, Phase};
use crate::package::util::*;
+use crate::package::version::VersionParser;
+use crate::package::version::NameVersionBuffer;
use crate::util::docker::ImageName;
use crate::util::executor::Executor;
@@ -77,10 +82,16 @@ impl Package {
pub fn get_all_dependencies(&self, executor: &dyn Executor, version_parser: &dyn VersionParser) -> Result<Vec<(PackageName, PackageVersionConstraint)>> {
use std::convert::TryInto;
- // TODO: Current implementation does not run dependency script
- //
-
- self.dependencies.iter().map(|d| d.clone().try_into()).collect()
+ self.build_dependencies_script
+ .as_ref()
+ .map(|path| executor.execute_dependency_script(path))
+ .transpose()?
+ .unwrap_or_default()
+ .into_iter()
+ .map(Ok)
+ .chain(self.dependencies.iter().cloned().map(|d| d.try_into().map_err(Error::from)))
+ .and_then_ok(|d| version_parser.parse(&d).with_context(|| format!("Failed to parse: '{:?}'", d)).map_err(Error::from))
+ .collect()
}
}
diff --git a/src/package/tree.rs b/src/package/tree.rs
index 0e963e5..17e2aaa 100644
--- a/src/package/tree.rs
+++ b/src/package/tree.rs
@@ -5,6 +5,7 @@ use anyhow::anyhow;
use crate::package::Package;
use crate::package::Loader;
+use crate::package::version::VersionParser;
use crate::util::executor::Executor;
pub struct Tree {
@@ -17,11 +18,11 @@ impl Tree {
Tree { root: BTreeMap::new() }
}
- pub fn add_package(&mut self, p: Package, loader: &Loader, executor: &dyn Executor) -> Result<()> {
+ pub fn add_package(&mut self, p: Package, loader: &Loader, executor: &dyn Executor, versionparser: &dyn VersionParser) -> Result<()> {
macro_rules! mk_add_package_tree {
- ($this:ident, $pack:ident, $loader:ident, $root:ident, $executor:ident) => {{
+ ($this:ident, $pack:ident, $loader:ident, $root:ident, $executor:ident, $versionparser:ident) => {{
let mut subtree = Tree::new();
- ($pack).get_all_dependencies($executor)?
+ ($pack).get_all_dependencies($executor, $versionparser)?
.into_iter()
.map(|(name, constr)| {
let pack = ($loader)
@@ -35,7 +36,7 @@ impl Tree {
return Err(anyhow!("Duplicate version of package {:?} found", ($pack)))
}
- add_package_tree(&mut subtree, pack, ($loader), ($root), ($executor))
+ add_package_tree(&mut subtree, pack, ($loader), ($root), ($executor), ($versionparser))
})
.collect::<Result<Vec<()>>>()?;
@@ -44,11 +45,11 @@ impl Tree {
}}
};
- fn add_package_tree(this: &mut Tree, p: Package, loader: &Loader, root: &mut Tree, executor: &dyn Executor) -> Result<()> {
- mk_add_package_tree!(this, p, loader, root, executor)
+ fn add_package_tree(this: &mut Tree, p: Package, loader: &Loader, root: &mut Tree, executor: &dyn Executor, versionparser: &dyn VersionParser) -> Result<()> {
+ mk_add_package_tree!(this, p, loader, root, executor, versionparser)
}
- mk_add_package_tree!(self, p, loader, self, executor)
+ mk_add_package_tree!(self, p, loader, self, executor, versionparser)
}
pub fn has_package(&self, p: &Package) -> bool {