Use the resolver to collect packages

This commit is contained in:
Yehuda Katz 2014-05-01 12:58:21 -07:00
parent 5accea9f81
commit 9c2967924f
9 changed files with 25 additions and 10 deletions

@ -1 +1 @@
Subproject commit 54ef9a3064d85c9756a9c183087a9e4e28056651
Subproject commit de700414aab1aaa4461618ce7a516cb24a8e6665

@ -1 +1 @@
Subproject commit 0a256d6f033f8652d3fbd84a4d5ae85aff582f3b
Subproject commit 5b36a2fc5a21236b2278391c12eb91981dbc8d06

View File

@ -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!());

View File

@ -25,5 +25,5 @@ pub mod source;
pub mod package;
pub mod dependency;
pub mod manifest;
pub mod resolver;
mod registry;
mod resolver;

View File

@ -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>;

View File

@ -3,8 +3,8 @@ use core;
use {CargoResult};
#[allow(dead_code)]
pub fn resolve(deps: &Vec<core::Dependency>, registry: &core::Registry) -> CargoResult<Vec<core::Package>> {
let mut remaining = deps.clone();
pub fn resolve(deps: &[core::Dependency], registry: &core::Registry) -> CargoResult<Vec<core::Package>> {
let mut remaining = Vec::from_slice(deps);
let mut resolve = HashMap::<&str, &core::Package>::new();
loop {

View File

@ -34,5 +34,5 @@ pub trait Source {
* and that the packages are already locally available on the file
* system.
*/
fn get(&self, packages: Vec<NameVer>) -> CargoResult<Vec<Package>>;
fn get(&self, packages: &[NameVer]) -> CargoResult<Vec<Package>>;
}

View File

@ -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::<Options>());
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<Dependency> = 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(), &registry);
println!("Resolved: {}", resolved);
Ok(())
//call_rustc(~BufReader::new(manifest_bytes.as_slice()))

View File

@ -40,7 +40,7 @@ impl Source for PathSource {
Ok(())
}
fn get(&self, packages: Vec<NameVer>) -> CargoResult<Vec<Package>> {
fn get(&self, packages: &[NameVer]) -> CargoResult<Vec<Package>> {
Ok(self.paths.iter().filter_map(|path| {
match read_manifest(path) {
Ok(ref manifest) => Some(Package::from_manifest(manifest)),