mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
Add transitive dependencies to the resolver
This commit is contained in:
parent
40353e83c6
commit
88dc9f14e2
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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")), ®).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")), ®).unwrap();
|
||||
|
||||
assert_that(&res, contains(vec!(pkg!("foo"), pkg!("bar" => "foo"))));
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
#![crate_type="rlib"]
|
||||
|
||||
#![allow(deprecated_owned_vector)]
|
||||
#![feature(macro_rules)]
|
||||
|
||||
extern crate collections;
|
||||
extern crate hammer;
|
||||
|
Loading…
x
Reference in New Issue
Block a user