From 79c8c646743c81955bcd60d241a5baf6b4a42370 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 7 Oct 2025 15:02:35 -0500 Subject: [PATCH 1/2] test(script): Script names that conflict with artifacts --- tests/testsuite/script/cargo.rs | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/tests/testsuite/script/cargo.rs b/tests/testsuite/script/cargo.rs index f5bb631cd1e..b505d999701 100644 --- a/tests/testsuite/script/cargo.rs +++ b/tests/testsuite/script/cargo.rs @@ -673,6 +673,73 @@ args: [] .run(); } +#[cargo_test(nightly, reason = "-Zscript is unstable")] +fn test_name_is_deps_dir_implicit() { + let script = ECHO_SCRIPT; + let p = cargo_test_support::project() + .file("deps.rs", script) + .build(); + + p.cargo("-Zscript -v deps.rs") + .masquerade_as_nightly_cargo(&["script"]) + .with_stdout_data(str![[r#" +current_exe: [ROOT]/home/.cargo/target/[HASH]/debug/deps-[EXE] +arg0: [..] +args: [] + +"#]]) + .with_stderr_data(str![[r#" +[WARNING] `package.edition` is unspecified, defaulting to `2024` +[COMPILING] deps- v0.0.0 ([ROOT]/foo/deps.rs) +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s +[RUNNING] `[ROOT]/home/.cargo/target/[HASH]/debug/deps-[EXE]` + +"#]]) + .run(); +} + +#[cargo_test(nightly, reason = "-Zscript is unstable")] +fn test_name_is_deps_dir_explicit() { + let script = r#"#!/usr/bin/env cargo +--- +package.name = "deps" +--- + +fn main() { + let current_exe = std::env::current_exe().unwrap().to_str().unwrap().to_owned(); + let mut args = std::env::args_os(); + let arg0 = args.next().unwrap().to_str().unwrap().to_owned(); + let args = args.collect::>(); + println!("current_exe: {current_exe}"); + println!("arg0: {arg0}"); + println!("args: {args:?}"); +} + +#[test] +fn test () {} +"#; + let p = cargo_test_support::project() + .file("deps.rs", script) + .build(); + + p.cargo("-Zscript -v deps.rs") + .masquerade_as_nightly_cargo(&["script"]) + .with_stdout_data(str![[r#" +current_exe: [ROOT]/home/.cargo/target/[HASH]/debug/deps-[EXE] +arg0: [..] +args: [] + +"#]]) + .with_stderr_data(str![[r#" +[WARNING] `package.edition` is unspecified, defaulting to `2024` +[COMPILING] deps v0.0.0 ([ROOT]/foo/deps.rs) +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s +[RUNNING] `[ROOT]/home/.cargo/target/[HASH]/debug/deps-[EXE]` + +"#]]) + .run(); +} + #[cargo_test(nightly, reason = "-Zscript is unstable")] fn script_like_dir() { let p = cargo_test_support::project() From b00064ca7bf452c8804c8c5cf3bf1d12f948fb32 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 7 Oct 2025 15:11:41 -0500 Subject: [PATCH 2/2] fix(script): Default bin.name to package.name The current behavior breaks from how implicit bins normally work when `package.name` is set. When it isn't set, they were using the same logic, so that should be fine. --- src/cargo/util/toml/mod.rs | 5 +---- tests/testsuite/script/cargo.rs | 15 ++++++--------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 4e5e8485e71..8d5edae44b6 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -379,10 +379,7 @@ fn normalize_toml( warnings, )?; let original_toml_bin = if is_embedded { - let manifest_file_stem = manifest_file - .file_stem() - .expect("file name enforced previously"); - let name = embedded::sanitize_name(manifest_file_stem.to_string_lossy().as_ref()); + let name = package_name.as_ref().to_owned(); let manifest_file_name = manifest_file .file_name() .expect("file name enforced previously"); diff --git a/tests/testsuite/script/cargo.rs b/tests/testsuite/script/cargo.rs index b505d999701..fe1abede0c5 100644 --- a/tests/testsuite/script/cargo.rs +++ b/tests/testsuite/script/cargo.rs @@ -724,17 +724,14 @@ fn test () {} p.cargo("-Zscript -v deps.rs") .masquerade_as_nightly_cargo(&["script"]) - .with_stdout_data(str![[r#" -current_exe: [ROOT]/home/.cargo/target/[HASH]/debug/deps-[EXE] -arg0: [..] -args: [] - -"#]]) + .with_status(101) + .with_stdout_data(str![""]) .with_stderr_data(str![[r#" [WARNING] `package.edition` is unspecified, defaulting to `2024` -[COMPILING] deps v0.0.0 ([ROOT]/foo/deps.rs) -[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s -[RUNNING] `[ROOT]/home/.cargo/target/[HASH]/debug/deps-[EXE]` +[ERROR] failed to parse manifest at `[ROOT]/foo/deps.rs` + +Caused by: + the binary target name `deps` is forbidden, it conflicts with cargo's build directory names "#]]) .run();