summaryrefslogtreecommitdiffstats
path: root/src/package/dag.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/package/dag.rs')
-rw-r--r--src/package/dag.rs36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/package/dag.rs b/src/package/dag.rs
index a4596aa..b698ff3 100644
--- a/src/package/dag.rs
+++ b/src/package/dag.rs
@@ -51,28 +51,26 @@ impl Dag {
) -> Result<()> {
p.get_self_packaged_dependencies()
.and_then_ok(|(name, constr)| {
- trace!("Dependency: {:?}", name);
+ trace!("Dependency for {} {} found: {:?}", p.name(), p.version(), name);
let packs = repo.find_with_version(&name, &constr);
- trace!("Found: {:?}", packs);
+ trace!("Found in repo: {:?}", packs);
- if mappings.keys().any(|p| packs.iter().any(|pk| pk.name() == p.name() && pk.version() == p.version())) {
- return Err(anyhow!(
- "Duplicate version of some package in {:?} found",
- packs
- ));
+ // If we didn't check that dependency already
+ if !mappings.keys().any(|p| packs.iter().any(|pk| pk.name() == p.name() && pk.version() == p.version())) {
+ // recurse
+ packs.into_iter()
+ .try_for_each(|p| {
+ progress.tick();
+
+ let idx = dag.add_node(p);
+ mappings.insert(p, idx);
+
+ trace!("Recursing for: {:?}", p);
+ add_sub_packages(repo, mappings, dag, p, progress)
+ })
+ } else {
+ Ok(())
}
- trace!("All dependecies available...");
-
- packs.into_iter()
- .map(|p| {
- progress.tick();
- trace!("Following dependecy: {:?}", p);
-
- let idx = dag.add_node(p);
- mappings.insert(p, idx);
- add_sub_packages(repo, mappings, dag, p, progress)
- })
- .collect()
})
.collect::<Result<()>>()
}