mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +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 {
|
pub fn get_name<'a>(&'a self) -> &'a str {
|
||||||
self.name.as_slice()
|
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);
|
let pkg = opts.get(0);
|
||||||
resolve.insert(pkg.get_name(), *pkg);
|
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::{
|
use hamcrest::{
|
||||||
assert_that,
|
assert_that,
|
||||||
equal_to,
|
equal_to,
|
||||||
of_len,
|
|
||||||
contains
|
contains
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -44,7 +49,15 @@ mod test {
|
|||||||
resolve
|
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 {
|
fn pkg(name: &str) -> Package {
|
||||||
Package::new(name, &Vec::<Dependency>::new())
|
Package::new(name, &Vec::<Dependency>::new())
|
||||||
@ -83,14 +96,17 @@ mod test {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn test_resolving_multiple_deps() {
|
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();
|
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());
|
assert_that(&res, contains(vec!(pkg("foo"), pkg("baz"))).exactly());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn test_resolving_transitive_deps() {
|
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"]
|
#![crate_type="rlib"]
|
||||||
|
|
||||||
#![allow(deprecated_owned_vector)]
|
#![allow(deprecated_owned_vector)]
|
||||||
|
#![feature(macro_rules)]
|
||||||
|
|
||||||
extern crate collections;
|
extern crate collections;
|
||||||
extern crate hammer;
|
extern crate hammer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user