diff --git a/src/cargo/core/compiler/fingerprint.rs b/src/cargo/core/compiler/fingerprint.rs index 284bc599304..e3783ddb6ce 100644 --- a/src/cargo/core/compiler/fingerprint.rs +++ b/src/cargo/core/compiler/fingerprint.rs @@ -96,9 +96,10 @@ pub fn prepare_target<'a, 'cfg>( if output.flavor == FileFlavor::DebugInfo { continue; } - missing_outputs |= !output.path.exists(); - if let Some(ref link_dst) = output.hardlink { - missing_outputs |= !link_dst.exists(); + if !output.path.exists() { + info!("missing output path {:?}", output.path); + missing_outputs = true; + break } } } diff --git a/tests/testsuite/freshness.rs b/tests/testsuite/freshness.rs index edf9c74dd62..7effa2a1c4c 100644 --- a/tests/testsuite/freshness.rs +++ b/tests/testsuite/freshness.rs @@ -1243,3 +1243,41 @@ fn dont_rebuild_based_on_plugins() { execs().with_status(0).with_stderr("[FINISHED] [..]\n"), ); } + +#[test] +fn reuse_workspace_lib() { + let p = project("p") + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.1.1" + + [workspace] + + [dependencies] + bar = { path = 'bar' } + "#, + ) + .file("src/lib.rs", "") + .file( + "bar/Cargo.toml", + r#" + [package] + name = "bar" + version = "0.1.1" + "#, + ) + .file("bar/src/lib.rs", "") + .build(); + + assert_that(p.cargo("build"), execs().with_status(0)); + assert_that( + p.cargo("test -p bar -v --no-run"), + execs().with_status(0).with_stderr("\ +[COMPILING] bar v0.1.1 ([..]) +[RUNNING] `rustc[..] --test [..]` +[FINISHED] [..] +")); +}