fix(embedded): Keep target dir in cargo home

This was broken in #12268 when we stopped using an intermediate
`Cargo.toml` file.

Unlike pre-#12268,
- We are hashing the path, rather than the content, with the assumption
  that people change content more frequently than the path
- We are using a simpler hash than `blake3` in the hopes that we can get
  away with it

Unlike the Pre-RFC demo
- We are not forcing a single target dir for all scripts in the hopes
  that we get #5931
This commit is contained in:
Ed Page 2023-06-16 21:37:55 -05:00
parent 282a3e7324
commit aca7b08405
2 changed files with 37 additions and 2 deletions

View File

@ -385,7 +385,17 @@ impl<'cfg> Workspace<'cfg> {
}
fn default_target_dir(&self) -> Filesystem {
Filesystem::new(self.root().join("target"))
if self.root_maybe().is_embedded() {
let hash = crate::util::hex::short_hash(&self.root_manifest().to_string_lossy());
let mut rel_path = PathBuf::new();
rel_path.push("target");
rel_path.push(&hash[0..2]);
rel_path.push(&hash[2..]);
self.config().home().join(rel_path)
} else {
Filesystem::new(self.root().join("target"))
}
}
/// Returns the root `[replace]` section of this workspace.

View File

@ -35,7 +35,7 @@ args: []
[WARNING] `package.edition` is unspecifiead, defaulting to `2021`
[COMPILING] echo v0.0.0 ([ROOT]/foo)
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]s
[RUNNING] `[..]debug/echo[EXE]`
[RUNNING] `[..]/debug/echo[EXE]`
",
)
.run();
@ -537,3 +537,28 @@ fn main() {
)
.run();
}
#[cargo_test]
fn implicit_target_dir() {
let script = ECHO_SCRIPT;
let p = cargo_test_support::project()
.file("script.rs", script)
.build();
p.cargo("-Zscript script.rs")
.masquerade_as_nightly_cargo(&["script"])
.with_stdout(
r#"bin: [ROOT]/home/.cargo/target/[..]/debug/script[EXE]
args: []
"#,
)
.with_stderr(
"\
[WARNING] `package.edition` is unspecifiead, defaulting to `2021`
[COMPILING] script v0.0.0 ([ROOT]/foo)
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]s
[RUNNING] `[ROOT]/home/.cargo/target/[..]/debug/script[EXE]`
",
)
.run();
}