From 03a2a29aed2414a6fe6baa88e6246b4aa1cbd01d Mon Sep 17 00:00:00 2001 From: arctic-alpaca <67190338+arctic-alpaca@users.noreply.github.com> Date: Tue, 6 May 2025 14:07:59 +0200 Subject: [PATCH 1/2] add test for cargo script workspace handling --- tests/testsuite/script.rs | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tests/testsuite/script.rs b/tests/testsuite/script.rs index 20fa7bcb3fb..2bf2aa2851e 100644 --- a/tests/testsuite/script.rs +++ b/tests/testsuite/script.rs @@ -1886,3 +1886,56 @@ CARGO_MANIFEST_PATH: [ROOT]/foo/script.rs "#]]) .run(); } + +#[cargo_test] +fn ignore_surrounding_workspace() { + let p = cargo_test_support::project() + .file( + std::path::Path::new(".cargo").join("config.toml"), + r#" +[registries.test-reg] +index = "https://github.com/rust-lang/crates.io-index" +"#, + ) + .file( + std::path::Path::new("inner").join("Cargo.toml"), + r#" +[package] +name = "inner" +version = "0.1.0" + +[dependencies] +serde = { version = "1.0", registry = "test-reg" } +"#, + ) + .file(std::path::Path::new("inner").join("src").join("lib.rs"), "") + .file(std::path::Path::new("script").join("echo.rs"), ECHO_SCRIPT) + .file( + "Cargo.toml", + r#" +[workspace] +members = [ + "inner", +] +"#, + ) + .build(); + + p.cargo("-Zscript -v script/echo.rs") + .masquerade_as_nightly_cargo(&["script"]) + .with_stdout_data(str![[r#""#]]) + .with_stderr_data(str![[r#" +[WARNING] `package.edition` is unspecified, defaulting to `2024` +[ERROR] failed to load manifest for workspace member `[ROOT]/foo/inner` +referenced by workspace at `[ROOT]/foo/Cargo.toml` + +Caused by: + failed to parse manifest at `[ROOT]/foo/inner/Cargo.toml` + +Caused by: + registry index was not found in any configuration: `test-reg` + +"#]]) + .with_status(101) + .run(); +} From 2b247ffd4ee5e8a99f2fec26213ce29fc9ab5ac5 Mon Sep 17 00:00:00 2001 From: arctic-alpaca <67190338+arctic-alpaca@users.noreply.github.com> Date: Tue, 6 May 2025 12:16:17 +0200 Subject: [PATCH 2/2] make cargo script ignore surrounding workspace --- src/cargo/util/toml/mod.rs | 9 ++++++++- tests/testsuite/script.rs | 18 ++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 9459fc6c37b..76d2db3cfed 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -13,6 +13,7 @@ use cargo_platform::Platform; use cargo_util::paths; use cargo_util_schemas::manifest::{ self, PackageName, PathBaseName, TomlDependency, TomlDetailedDependency, TomlManifest, + TomlWorkspace, }; use cargo_util_schemas::manifest::{RustVersion, StringOrBool}; use itertools::Itertools; @@ -80,7 +81,8 @@ pub fn read_manifest( let empty = Vec::new(); let cargo_features = original_toml.cargo_features.as_ref().unwrap_or(&empty); let features = Features::new(cargo_features, gctx, &mut warnings, source_id.is_path())?; - let workspace_config = to_workspace_config(&original_toml, path, gctx, &mut warnings)?; + let workspace_config = + to_workspace_config(&original_toml, path, is_embedded, gctx, &mut warnings)?; if let WorkspaceConfig::Root(ws_root_config) = &workspace_config { let package_root = path.parent().unwrap(); gctx.ws_roots @@ -211,9 +213,14 @@ fn stringify(dst: &mut String, path: &serde_ignored::Path<'_>) { fn to_workspace_config( original_toml: &manifest::TomlManifest, manifest_file: &Path, + is_embedded: bool, gctx: &GlobalContext, warnings: &mut Vec, ) -> CargoResult { + if is_embedded { + let ws_root_config = to_workspace_root_config(&TomlWorkspace::default(), manifest_file); + return Ok(WorkspaceConfig::Root(ws_root_config)); + } let workspace_config = match ( original_toml.workspace.as_ref(), original_toml.package().and_then(|p| p.workspace.as_ref()), diff --git a/tests/testsuite/script.rs b/tests/testsuite/script.rs index 2bf2aa2851e..d1f57682707 100644 --- a/tests/testsuite/script.rs +++ b/tests/testsuite/script.rs @@ -1923,19 +1923,17 @@ members = [ p.cargo("-Zscript -v script/echo.rs") .masquerade_as_nightly_cargo(&["script"]) - .with_stdout_data(str![[r#""#]]) + .with_stdout_data(str![[r#" +bin: [ROOT]/home/.cargo/target/[HASH]/debug/echo[EXE] +args: [] + +"#]]) .with_stderr_data(str![[r#" [WARNING] `package.edition` is unspecified, defaulting to `2024` -[ERROR] failed to load manifest for workspace member `[ROOT]/foo/inner` -referenced by workspace at `[ROOT]/foo/Cargo.toml` - -Caused by: - failed to parse manifest at `[ROOT]/foo/inner/Cargo.toml` - -Caused by: - registry index was not found in any configuration: `test-reg` +[COMPILING] echo v0.0.0 ([ROOT]/foo/script/echo.rs) +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s +[RUNNING] `[ROOT]/home/.cargo/target/[HASH]/debug/echo[EXE]` "#]]) - .with_status(101) .run(); }