diff --git a/src/cargo/ops/cargo_new.rs b/src/cargo/ops/cargo_new.rs index 4598db07ed6..a3d08bb4db0 100644 --- a/src/cargo/ops/cargo_new.rs +++ b/src/cargo/ops/cargo_new.rs @@ -802,7 +802,7 @@ fn mk(gctx: &GlobalContext, opts: &MkOptions<'_>) -> CargoResult<()> { } } - let manifest_path = path.join("Cargo.toml"); + let manifest_path = paths::normalize_path(&path.join("Cargo.toml")); if let Ok(root_manifest_path) = find_root_manifest_for_wd(&manifest_path) { let root_manifest = paths::read(&root_manifest_path)?; // Sometimes the root manifest is not a valid manifest, so we only try to parse it if it is. @@ -906,7 +906,7 @@ mod tests { } } - if let Err(e) = Workspace::new(&path.join("Cargo.toml"), gctx) { + if let Err(e) = Workspace::new(&manifest_path, gctx) { crate::display_warning_with_error( "compiling this new package may not work due to invalid \ workspace configuration", diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/in/workspace/Cargo.toml b/tests/testsuite/cargo_new/ignore_current_dir_workspace/in/workspace/Cargo.toml new file mode 100644 index 00000000000..cd7525f4050 --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/in/workspace/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] + +[package] +name = "foo" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/in/workspace/src/main.rs b/tests/testsuite/cargo_new/ignore_current_dir_workspace/in/workspace/src/main.rs new file mode 100644 index 00000000000..f328e4d9d04 --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/in/workspace/src/main.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/mod.rs b/tests/testsuite/cargo_new/ignore_current_dir_workspace/mod.rs new file mode 100644 index 00000000000..d1316c16bfa --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/mod.rs @@ -0,0 +1,25 @@ +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::prelude::*; +use cargo_test_support::str; +use cargo_test_support::CargoCommandExt; +use cargo_test_support::Project; + +#[cargo_test] +fn case() { + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root.join("workspace"); + + snapbox::cmd::Command::cargo_ui() + .arg("new") + .args(["../out-of-workspace", "--lib"]) + .current_dir(cwd) + .assert() + .success() + .stdout_eq(str![""]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/out-of-workspace/Cargo.toml b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/out-of-workspace/Cargo.toml new file mode 100644 index 00000000000..e0fde467294 --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/out-of-workspace/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "out-of-workspace" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/out-of-workspace/src/lib.rs b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/out-of-workspace/src/lib.rs new file mode 100644 index 00000000000..b93cf3ffd9c --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/out-of-workspace/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/workspace/Cargo.toml b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/workspace/Cargo.toml new file mode 100644 index 00000000000..cd7525f4050 --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/workspace/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] + +[package] +name = "foo" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/workspace/src/main.rs b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/workspace/src/main.rs new file mode 100644 index 00000000000..f328e4d9d04 --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/out/workspace/src/main.rs @@ -0,0 +1 @@ +fn main() {} diff --git a/tests/testsuite/cargo_new/ignore_current_dir_workspace/stderr.term.svg b/tests/testsuite/cargo_new/ignore_current_dir_workspace/stderr.term.svg new file mode 100644 index 00000000000..7858e42a578 --- /dev/null +++ b/tests/testsuite/cargo_new/ignore_current_dir_workspace/stderr.term.svg @@ -0,0 +1,30 @@ + + + + + + + Creating library `out-of-workspace` package + + note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + + + + + + diff --git a/tests/testsuite/cargo_new/mod.rs b/tests/testsuite/cargo_new/mod.rs index ca8ee0f9cd5..b278e95bded 100644 --- a/tests/testsuite/cargo_new/mod.rs +++ b/tests/testsuite/cargo_new/mod.rs @@ -8,6 +8,7 @@ mod add_members_to_workspace_with_members_glob; mod add_members_to_workspace_without_members; mod empty_name; mod help; +mod ignore_current_dir_workspace; mod inherit_workspace_lints; mod inherit_workspace_package_table; mod inherit_workspace_package_table_with_edition;