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 20fa7bcb3fb..d1f57682707 100644 --- a/tests/testsuite/script.rs +++ b/tests/testsuite/script.rs @@ -1886,3 +1886,54 @@ 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#" +bin: [ROOT]/home/.cargo/target/[HASH]/debug/echo[EXE] +args: [] + +"#]]) + .with_stderr_data(str![[r#" +[WARNING] `package.edition` is unspecified, defaulting to `2024` +[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]` + +"#]]) + .run(); +}