Add transitive dependencies to the resolver

This commit is contained in:
Carlhuda 2014-04-11 15:55:47 -07:00
parent 40353e83c6
commit 88dc9f14e2
3 changed files with 24 additions and 3 deletions

View File

@ -22,4 +22,8 @@ impl Package {
pub fn get_name<'a>(&'a self) -> &'a str {
self.name.as_slice()
}
pub fn get_dependencies<'a>(&'a self) -> &'a Vec<core::Dependency> {
&self.deps
}
}

View File

@ -21,6 +21,12 @@ pub fn resolve(deps: &Vec<core::Dependency>, registry: &core::Registry) -> Cargo
let pkg = opts.get(0);
resolve.insert(pkg.get_name(), *pkg);
for dep in pkg.get_dependencies().iter() {
if !resolve.contains_key_equiv(&dep.get_name()) {
remaining.push(dep.clone());
}
}
}
}
@ -30,7 +36,6 @@ mod test {
use hamcrest::{
assert_that,
equal_to,
of_len,
contains
};
@ -44,7 +49,15 @@ mod test {
resolve
};
macro_rules! pkg(
($name:expr => $($deps:expr),+) => (
Package::new($name, &vec!($($deps),+).iter().map(|s| Dependency::new(*s)).collect())
);
($name:expr) => (
Package::new($name, &vec!())
)
)
fn pkg(name: &str) -> Package {
Package::new(name, &Vec::<Dependency>::new())
@ -83,14 +96,17 @@ mod test {
#[test]
pub fn test_resolving_multiple_deps() {
let reg = registry(vec!(pkg("foo"), pkg("bar"), pkg("baz")));
let reg = registry(vec!(pkg!("foo"), pkg!("bar"), pkg!("baz")));
let res = resolve(&vec!(dep("foo"), dep("baz")), &reg).unwrap();
assert_that(&res, of_len(2));
assert_that(&res, contains(vec!(pkg("foo"), pkg("baz"))).exactly());
}
#[test]
pub fn test_resolving_transitive_deps() {
let reg = registry(vec!(pkg!("foo"), pkg!("bar" => "foo")));
let res = resolve(&vec!(dep("bar")), &reg).unwrap();
assert_that(&res, contains(vec!(pkg!("foo"), pkg!("bar" => "foo"))));
}
}

View File

@ -2,6 +2,7 @@
#![crate_type="rlib"]
#![allow(deprecated_owned_vector)]
#![feature(macro_rules)]
extern crate collections;
extern crate hammer;