summaryrefslogtreecommitdiffstats
path: root/src/package/package.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-10-12 17:54:23 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-10-12 17:54:23 +0200
commite7b4869b2688590fdcd605e21a213255c0f1f4c7 (patch)
treef911951dcd5fb0653582a8afcca0cdf3eec3d5d9 /src/package/package.rs
parent34e12f9a288d8fbe486393e1419145be3db2e8b3 (diff)
Implement dependency getting properly, including version parsing
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/package/package.rs')
-rw-r--r--src/package/package.rs19
1 files changed, 15 insertions, 4 deletions
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()
}
}