about summary refs log tree commit diff
path: root/src/librustpkg/rustpkg.rc
diff options
context:
space:
mode:
Diffstat (limited to 'src/librustpkg/rustpkg.rc')
-rw-r--r--src/librustpkg/rustpkg.rc50
1 files changed, 21 insertions, 29 deletions
diff --git a/src/librustpkg/rustpkg.rc b/src/librustpkg/rustpkg.rc
index 8381e6ad816..e1edce6ce5b 100644
--- a/src/librustpkg/rustpkg.rc
+++ b/src/librustpkg/rustpkg.rc
@@ -36,14 +36,19 @@ use rustc::metadata::filesearch;
 use std::{getopts};
 use syntax::{ast, diagnostic};
 use util::*;
-use path_util::{normalize, workspace_contains_package_id};
-use path_util::{build_pkg_id_in_workspace, pkgid_src_in_workspace, rust_path};
+use path_util::normalize;
+use path_util::{build_pkg_id_in_workspace, pkgid_src_in_workspace};
+use workspace::pkg_parent_workspaces;
 use rustc::driver::session::{lib_crate, bin_crate, crate_type};
+use context::Ctx;
 
 mod conditions;
+mod context;
 mod usage;
 mod path_util;
+mod tests;
 mod util;
+mod workspace;
 
 /// A PkgScript represents user-supplied custom logic for
 /// special build hooks. This only exists for packages with
@@ -154,14 +159,6 @@ impl PkgScript {
 
 }
 
-struct Ctx {
-    // I'm not sure what this is for
-    json: bool,
-    // Cache of hashes of things already installed
-    // though I'm not sure why the value is a bool
-    dep_cache: @mut HashMap<~str, bool>,
-}
-
 impl Ctx {
 
     fn run(&self, cmd: ~str, args: ~[~str]) {
@@ -194,17 +191,7 @@ impl Ctx {
                 // The package id is presumed to be the first command-line
                 // argument
                 let pkgid = PkgId::new(args[0]);
-                // Using the RUST_PATH, find workspaces that contain
-                // this package ID
-                let workspaces = rust_path().filtered(|ws|
-                    workspace_contains_package_id(pkgid, ws));
-                if workspaces.is_empty() {
-                    fail!(fmt!("Package %s not found in any of \
-                        the following workspaces: %s",
-                               pkgid.path.to_str(),
-                               rust_path().to_str()));
-                }
-                for workspaces.each |workspace| {
+                for pkg_parent_workspaces(pkgid) |workspace| {
                     let src_dir   = pkgid_src_in_workspace(pkgid, workspace);
                     let build_dir = build_pkg_id_in_workspace(pkgid, workspace);
                     debug!("Destination dir = %s", build_dir.to_str());
@@ -271,10 +258,16 @@ impl Ctx {
                 self.info();
             }
             ~"install" => {
-                self.install(if args.len() >= 1 { Some(args[0]) }
-                             else { None },
-                             if args.len() >= 2 { Some(args[1]) }
-                             else { None }, false);
+                if args.len() < 1 {
+                    return usage::install();
+                }
+
+                // The package id is presumed to be the first command-line
+                // argument
+                let pkgid = PkgId::new(args[0]);
+                for pkg_parent_workspaces(pkgid) |workspace| {
+                    self.install(workspace, pkgid);
+                }
             }
             ~"prefer" => {
                 if args.len() < 1 {
@@ -310,9 +303,9 @@ impl Ctx {
         }
     }
 
-    fn do_cmd(&self, cmd: ~str, pkgname: ~str)  {
+    fn do_cmd(&self, _cmd: ~str, _pkgname: ~str)  {
         // stub
-        fail!("`do` not yet implemented");
+        fail!(~"`do` not yet implemented");
     }
 
     fn clean(&self, workspace: &Path, id: PkgId)  {
@@ -336,8 +329,7 @@ impl Ctx {
         fail!(~"info not yet implemented");
     }
 
-    fn install(&self, _url: Option<~str>,
-               _target: Option<~str>, _cache: bool)  {
+    fn install(&self, _workspace: &Path, _id: PkgId)  {
         // stub
         fail!(~"install not yet implemented");
     }