about summary refs log tree commit diff
path: root/src/librustpkg/workspace.rs
diff options
context:
space:
mode:
authorTim Chevalier <chevalier@alum.wellesley.edu>2013-04-24 17:37:59 -0700
committerTim Chevalier <chevalier@alum.wellesley.edu>2013-04-24 17:51:31 -0700
commit4e2c8f422aec1aef910fdfdac57f5f66a7465355 (patch)
treefb63b27dcf1fe7ce2bc366e7ed70d57ff0414535 /src/librustpkg/workspace.rs
parentf945e57bd050227bbf92f151303785991173f2fe (diff)
rustpkg: Preliminary work on install command
Mostly just tests (that are ignored); install command is still
stubbed out.
Diffstat (limited to 'src/librustpkg/workspace.rs')
-rw-r--r--src/librustpkg/workspace.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/librustpkg/workspace.rs b/src/librustpkg/workspace.rs
new file mode 100644
index 00000000000..15e2166b24a
--- /dev/null
+++ b/src/librustpkg/workspace.rs
@@ -0,0 +1,34 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// rustpkg utilities having to do with workspaces
+
+use path_util::{rust_path, workspace_contains_package_id};
+use util::PkgId;
+use core::path::Path;
+
+pub fn pkg_parent_workspaces(pkgid: PkgId, action: &fn(&Path) -> bool) {
+    // 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() {
+        // tjc: make this a condition
+        fail!(fmt!("Package %s not found in any of \
+                    the following workspaces: %s",
+                   pkgid.path.to_str(),
+                   rust_path().to_str()));
+    }
+    for workspaces.each |ws| {
+        if action(ws) {
+            break;
+        }
+    }
+}
\ No newline at end of file