Use the resolver to collect packages
authorYehuda Katz <wycats@gmail.com>
Thu, 1 May 2014 19:58:21 +0000 (12:58 -0700)
committerYehuda Katz <wycats@gmail.com>
Thu, 1 May 2014 19:59:14 +0000 (12:59 -0700)
libs/hamcrest-rust
libs/hammer.rs
src/cargo/core/manifest.rs
src/cargo/core/mod.rs
src/cargo/core/registry.rs
src/cargo/core/resolver.rs
src/cargo/core/source.rs
src/cargo/ops/cargo_compile.rs
src/cargo/sources/path.rs

index 54ef9a3064d85c9756a9c183087a9e4e28056651..de700414aab1aaa4461618ce7a516cb24a8e6665 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 54ef9a3064d85c9756a9c183087a9e4e28056651
+Subproject commit de700414aab1aaa4461618ce7a516cb24a8e6665
index 0a256d6f033f8652d3fbd84a4d5ae85aff582f3b..5b36a2fc5a21236b2278391c12eb91981dbc8d06 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 0a256d6f033f8652d3fbd84a4d5ae85aff582f3b
+Subproject commit 5b36a2fc5a21236b2278391c12eb91981dbc8d06
index 9568f9504279a790548652b79fc5175c46547127..59b02368f44e2e9289cc31448a1427a44fc5a725 100644 (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!());
index 6fc26e4d8bc8e56a179be1bdedb848138222eafc..d9ea34eb7291cc54ee4273131650a3695bb9c077 100644 (file)
@@ -25,5 +25,5 @@ pub mod source;
 pub mod package;
 pub mod dependency;
 pub mod manifest;
+pub mod resolver;
 mod registry;
-mod resolver;
index cfb41e7e52e8392fc68ed3e2c0472009f101889b..ec6c9557a60efdec2e0f8e6f85d2ec3cc3e8b455 100644 (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>;
index 3ea6ffd18280618282a8509b1061c0b7e85aded0..756320cf4f0a957cbfbdafacdac6d4eb64e08bd7 100644 (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 {
index 1b5edaefc2f1b165df199b6e25f37381867b62e9..243d52dbbf72479f91b5f6a3fa73b467e6946053 100644 (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>>;
 }
index 1ac6c523340987c2737c8b1394b1c9cf0fb3233d..8417b6cfda062688fef071a8c5651c1e8f55a237 100644 (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()))
index f6045b8b41a129e17a6c57486124367e13fa6d0a..da2a03aa9afa10244cb7129777e8c8be929e7094 100644 (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)),