Skip to content

Commit d04355a

Browse files
committed
Auto merge of #13987 - epage:new, r=ehuss
fix(new): Dont say were adding to a workspace when a regular package is in root Fixes #13985
2 parents ef56deb + 26c1678 commit d04355a

File tree

2 files changed

+29
-29
lines changed

2 files changed

+29
-29
lines changed

src/cargo/ops/cargo_new.rs

+26-24
Original file line numberDiff line numberDiff line change
@@ -971,38 +971,40 @@ fn update_manifest_with_new_member(
971971
workspace_document: &mut toml_edit::DocumentMut,
972972
display_path: &str,
973973
) -> CargoResult<bool> {
974+
let Some(workspace) = workspace_document.get_mut("workspace") else {
975+
return Ok(false);
976+
};
977+
974978
// If the members element already exist, check if one of the patterns
975979
// in the array already includes the new package's relative path.
976980
// - Add the relative path if the members don't match the new package's path.
977981
// - Create a new members array if there are no members element in the workspace yet.
978-
if let Some(workspace) = workspace_document.get_mut("workspace") {
979-
if let Some(members) = workspace
980-
.get_mut("members")
981-
.and_then(|members| members.as_array_mut())
982-
{
983-
for member in members.iter() {
984-
let pat = member
985-
.as_str()
986-
.with_context(|| format!("invalid non-string member `{}`", member))?;
987-
let pattern = glob::Pattern::new(pat)
988-
.with_context(|| format!("cannot build glob pattern from `{}`", pat))?;
989-
990-
if pattern.matches(&display_path) {
991-
return Ok(false);
992-
}
993-
}
982+
if let Some(members) = workspace
983+
.get_mut("members")
984+
.and_then(|members| members.as_array_mut())
985+
{
986+
for member in members.iter() {
987+
let pat = member
988+
.as_str()
989+
.with_context(|| format!("invalid non-string member `{}`", member))?;
990+
let pattern = glob::Pattern::new(pat)
991+
.with_context(|| format!("cannot build glob pattern from `{}`", pat))?;
994992

995-
let was_sorted = is_sorted(members.iter().map(Value::as_str));
996-
members.push(display_path);
997-
if was_sorted {
998-
members.sort_by(|lhs, rhs| lhs.as_str().cmp(&rhs.as_str()));
993+
if pattern.matches(&display_path) {
994+
return Ok(false);
999995
}
1000-
} else {
1001-
let mut array = Array::new();
1002-
array.push(display_path);
996+
}
1003997

1004-
workspace["members"] = toml_edit::value(array);
998+
let was_sorted = is_sorted(members.iter().map(Value::as_str));
999+
members.push(display_path);
1000+
if was_sorted {
1001+
members.sort_by(|lhs, rhs| lhs.as_str().cmp(&rhs.as_str()));
10051002
}
1003+
} else {
1004+
let mut array = Array::new();
1005+
array.push(display_path);
1006+
1007+
workspace["members"] = toml_edit::value(array);
10061008
}
10071009

10081010
write_atomic(

tests/testsuite/cargo_new/add_members_to_non_workspace/stderr.term.svg

+3-5
Loading

0 commit comments

Comments
 (0)