]> git.lizzy.rs Git - rust.git/commitdiff
rustpkg: Fix fetching remote packages
authorTim Chevalier <chevalier@alum.wellesley.edu>
Sun, 6 Oct 2013 04:38:27 +0000 (00:38 -0400)
committerTim Chevalier <chevalier@alum.wellesley.edu>
Sun, 6 Oct 2013 04:49:11 +0000 (00:49 -0400)
Closes #9193

src/librustpkg/util.rs

index 17bda88339314067bc0290874a6e5974c8bcb3ec..78b5321ae13e6fd4c34bba6a2b66fd3511616d94 100644 (file)
 use package_id::PkgId;
 use package_source::PkgSrc;
 use workspace::pkg_parent_workspaces;
-use path_util::{installed_library_in_workspace, U_RWX, rust_path, system_library, target_build_dir};
-use messages::error;
-use conditions::nonexistent_package::cond;
-
+use path_util::{installed_library_in_workspace, U_RWX, system_library, target_build_dir};
+use path_util::default_workspace;
 pub use target::{OutputType, Main, Lib, Bench, Test, JustOne, lib_name_of, lib_crate_filename};
 use workcache_support::{digest_file_with_date, digest_only_date};
 
@@ -432,26 +430,26 @@ fn visit_view_item(&mut self, vi: &ast::view_item, env: ()) {
                                lib_name.to_str());
                         // Try to install it
                         let pkg_id = PkgId::new(lib_name);
+                        // Find all the workspaces in the RUST_PATH that contain this package.
                         let workspaces = pkg_parent_workspaces(&self.context.context,
                                                                &pkg_id);
-                        let source_workspace = if workspaces.is_empty() {
-                            error(format!("Couldn't find package {} \
-                                       in any of the workspaces in the RUST_PATH ({})",
-                                       lib_name,
-                                       rust_path().map(|s| s.to_str()).connect(":")));
-                            cond.raise((pkg_id.clone(), ~"Dependency not found"))
-                        }
-                            else {
-                            workspaces[0]
-                        };
+                        // Two cases:
+                        // (a) `workspaces` is empty. That means there's no local source
+                        // for this package. In that case, we pass the default workspace
+                        // into `PkgSrc::new`, so that if it exists as a remote repository,
+                        // its sources will be fetched into it.
+                        // (b) `workspaces` is non-empty -- we found a local source for this
+                        // package.
+                        let dest_workspace = if workspaces.is_empty() {
+                            default_workspace()
+                        } else { workspaces[0] };
+                        let pkg_src = PkgSrc::new(dest_workspace,
+                        // Use the rust_path_hack to search for dependencies iff
+                        // we were already using it
+                                                  self.context.context.use_rust_path_hack,
+                                                  pkg_id);
                         let (outputs_disc, inputs_disc) =
-                            self.context.install(PkgSrc::new(source_workspace.clone(),
-                            // Use the rust_path_hack to search for dependencies iff
-                            // we were already using it
-                            self.context.context.use_rust_path_hack,
-                                                             pkg_id),
-                                                 &JustOne(Path(
-                                    lib_crate_filename)));
+                            self.context.install(pkg_src, &JustOne(Path(lib_crate_filename)));
                         debug2!("Installed {}, returned {:?} dependencies and \
                                {:?} transitive dependencies",
                                lib_name, outputs_disc.len(), inputs_disc.len());