From: Yehuda Katz Date: Thu, 1 May 2014 19:58:21 +0000 (-0700) Subject: Use the resolver to collect packages X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~1097 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9c2967924f4fb16cf080db1ce126ff50e622c237;p=cargo.git Use the resolver to collect packages --- diff --git a/libs/hamcrest-rust b/libs/hamcrest-rust index 54ef9a306..de700414a 160000 --- a/libs/hamcrest-rust +++ b/libs/hamcrest-rust @@ -1 +1 @@ -Subproject commit 54ef9a3064d85c9756a9c183087a9e4e28056651 +Subproject commit de700414aab1aaa4461618ce7a516cb24a8e6665 diff --git a/libs/hammer.rs b/libs/hammer.rs index 0a256d6f0..5b36a2fc5 160000 --- a/libs/hammer.rs +++ b/libs/hammer.rs @@ -1 +1 @@ -Subproject commit 0a256d6f033f8652d3fbd84a4d5ae85aff582f3b +Subproject commit 5b36a2fc5a21236b2278391c12eb91981dbc8d06 diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index 9568f9504..59b02368f 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -41,6 +41,8 @@ impl Manifest { let deps = dependencies.clone().map(|deps| { deps.iter().map(|(k,v)| { + // This can produce an invalid version, but it's temporary because this needs + // to be replaced with Dependency, not NameVer Dependency::with_namever(&NameVer::new(k.clone(), v.clone())) }).collect() }).unwrap_or_else(|| vec!()); diff --git a/src/cargo/core/mod.rs b/src/cargo/core/mod.rs index 6fc26e4d8..d9ea34eb7 100644 --- a/src/cargo/core/mod.rs +++ b/src/cargo/core/mod.rs @@ -25,5 +25,5 @@ pub mod source; pub mod package; pub mod dependency; pub mod manifest; +pub mod resolver; mod registry; -mod resolver; diff --git a/src/cargo/core/registry.rs b/src/cargo/core/registry.rs index cfb41e7e5..ec6c9557a 100644 --- a/src/cargo/core/registry.rs +++ b/src/cargo/core/registry.rs @@ -2,7 +2,8 @@ use std::vec::Vec; use core::{ // Dependency, - Package}; + Package +}; pub trait Registry { fn query<'a>(&'a self, name: &str) -> Vec<&'a Package>; diff --git a/src/cargo/core/resolver.rs b/src/cargo/core/resolver.rs index 3ea6ffd18..756320cf4 100644 --- a/src/cargo/core/resolver.rs +++ b/src/cargo/core/resolver.rs @@ -3,8 +3,8 @@ use core; use {CargoResult}; #[allow(dead_code)] -pub fn resolve(deps: &Vec, registry: &core::Registry) -> CargoResult> { - let mut remaining = deps.clone(); +pub fn resolve(deps: &[core::Dependency], registry: &core::Registry) -> CargoResult> { + let mut remaining = Vec::from_slice(deps); let mut resolve = HashMap::<&str, &core::Package>::new(); loop { diff --git a/src/cargo/core/source.rs b/src/cargo/core/source.rs index 1b5edaefc..243d52dbb 100644 --- a/src/cargo/core/source.rs +++ b/src/cargo/core/source.rs @@ -34,5 +34,5 @@ pub trait Source { * and that the packages are already locally available on the file * system. */ - fn get(&self, packages: Vec) -> CargoResult>; + fn get(&self, packages: &[NameVer]) -> CargoResult>; } diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 1ac6c5233..8417b6cfd 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -25,8 +25,11 @@ use std::os; use util::config; use util::config::{all_configs,ConfigValue}; use cargo_read_manifest = ops::cargo_read_manifest::read_manifest; +use core::resolver::resolve; +use core::package::PackageSet; use core::Package; use core::source::Source; +use core::dependency::Dependency; use sources::path::PathSource; use {CargoError,ToCargoError,CargoResult}; @@ -41,7 +44,7 @@ impl FlagConfig for Options { pub fn compile() -> CargoResult<()> { let options = try!(flags::()); - let manifest_bytes = try!(read_manifest(options.manifest_path)); + let manifest = try!(cargo_read_manifest(options.manifest_path)); let configs = try!(all_configs(os::getcwd())); let config_paths = configs.find(&~"paths").map(|v| v.clone()).unwrap_or_else(|| ConfigValue::new()); @@ -54,7 +57,16 @@ pub fn compile() -> CargoResult<()> { let source = PathSource::new(paths); let names = try!(source.list()); try!(source.download(names.as_slice())); - let packages = try!(source.get(names)); + + let deps: Vec = names.iter().map(|namever| { + Dependency::with_namever(namever) + }).collect(); + + let packages = try!(source.get(names.as_slice())); + let registry = PackageSet::new(packages.as_slice()); + + let resolved = resolve(deps.as_slice(), ®istry); + println!("Resolved: {}", resolved); Ok(()) //call_rustc(~BufReader::new(manifest_bytes.as_slice())) diff --git a/src/cargo/sources/path.rs b/src/cargo/sources/path.rs index f6045b8b4..da2a03aa9 100644 --- a/src/cargo/sources/path.rs +++ b/src/cargo/sources/path.rs @@ -40,7 +40,7 @@ impl Source for PathSource { Ok(()) } - fn get(&self, packages: Vec) -> CargoResult> { + fn get(&self, packages: &[NameVer]) -> CargoResult> { Ok(self.paths.iter().filter_map(|path| { match read_manifest(path) { Ok(ref manifest) => Some(Package::from_manifest(manifest)),