From 1484c3ff15f4246fb2739f2e3e0be33789e58668 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 5 Jul 2018 12:05:50 -0700 Subject: [PATCH] Fix `cargo install` using a workspace target dir Closes #5662 --- src/cargo/ops/cargo_install.rs | 9 ++++++- tests/testsuite/install.rs | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/cargo/ops/cargo_install.rs b/src/cargo/ops/cargo_install.rs index 9516aac0917..60c43321a67 100644 --- a/src/cargo/ops/cargo_install.rs +++ b/src/cargo/ops/cargo_install.rs @@ -224,7 +224,14 @@ fn install_one( Some(Filesystem::new(config.cwd().join("target-install"))) }; - let ws = Workspace::ephemeral(pkg, config, overidden_target_dir, false)?; + let ws = match overidden_target_dir { + Some(dir) => Workspace::ephemeral(pkg, config, Some(dir), false)?, + None => { + let mut ws = Workspace::new(pkg.manifest_path(), config)?; + ws.set_require_optional_deps(false); + ws + } + }; let pkg = ws.current()?; if from_cwd { diff --git a/tests/testsuite/install.rs b/tests/testsuite/install.rs index 6c24e17f0c2..b26721d3541 100644 --- a/tests/testsuite/install.rs +++ b/tests/testsuite/install.rs @@ -1581,3 +1581,47 @@ fn git_repo_replace() { .contains(&format!("{}", new_rev)) ); } + +#[test] +fn workspace_uses_workspace_target_dir() { + let p = project("foo") + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.1.0" + authors = [] + + [workspace] + + [dependencies] + bar = { path = 'bar' } + "#, + ) + .file("src/main.rs", "fn main() {}") + .file( + "bar/Cargo.toml", + r#" + [package] + name = "bar" + version = "0.1.0" + authors = [] + "#, + ) + .file("bar/src/main.rs", "fn main() {}") + .build(); + + assert_that(p.cargo("build").cwd(p.root().join("bar")).arg("--release"), + execs().with_status(0)); + assert_that( + cargo_process("install").arg("--path").arg(p.root().join("bar")), + execs().with_status(0).with_stderr( + "[INSTALLING] [..] +[FINISHED] release [optimized] target(s) in [..] +[INSTALLING] [..] +warning: be sure to add `[..]` to your PATH to be able to run the installed binaries +", + ), + ); +}