diff --git a/crate_universe/src/metadata/cargo_tree_resolver.rs b/crate_universe/src/metadata/cargo_tree_resolver.rs index bdcfa2b31a..27c5c03155 100644 --- a/crate_universe/src/metadata/cargo_tree_resolver.rs +++ b/crate_universe/src/metadata/cargo_tree_resolver.rs @@ -150,6 +150,7 @@ impl TreeResolver { // host triple instead of the host triple detected by rustc. .env("RUSTC_WRAPPER", rustc_wrapper) .env("HOST_TRIPLE", host_triple) + .env("CARGO_CACHE_RUSTC_INFO", "0") .current_dir(manifest_path.parent().expect("All manifests should have a valid parent.")) .arg("tree") .arg("--manifest-path") diff --git a/crate_universe/tests/cargo_integration_test.rs b/crate_universe/tests/cargo_integration_test.rs index 49b739b8d2..d8bf4f1f51 100644 --- a/crate_universe/tests/cargo_integration_test.rs +++ b/crate_universe/tests/cargo_integration_test.rs @@ -526,16 +526,24 @@ fn host_specific_build_deps() { } let r = runfiles::Runfiles::create().unwrap(); + + let src_cargo_toml = runfiles::rlocation!( + r, + "rules_rust/crate_universe/test_data/metadata/host_specific_build_deps/Cargo.toml" + ) + .unwrap(); + + // Put Cargo.toml into writable directory structure and create target/ directory to verify that + // cargo does not incorrectly cache rustc info in target/.rustc_info.json file. + let scratch = tempfile::tempdir().unwrap(); + let cargo_toml = scratch.path().join("Cargo.toml"); + fs::copy(src_cargo_toml, &cargo_toml).unwrap(); + fs::create_dir(scratch.path().join("target")).unwrap(); + let metadata = run( "host_specific_build_deps", HashMap::from([( - runfiles::rlocation!( - r, - "rules_rust/crate_universe/test_data/metadata/host_specific_build_deps/Cargo.toml" - ) - .unwrap() - .to_string_lossy() - .to_string(), + cargo_toml.to_string_lossy().to_string(), "//:test_input".to_string(), )]), "rules_rust/crate_universe/test_data/metadata/host_specific_build_deps/Cargo.lock",