diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index a1614f00ec4..c22466399e7 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -98,7 +98,12 @@ pub fn add(workspace: &Workspace<'_>, options: &AddOptions<'_>) -> CargoResult<( .get_table(&dep_table) .map(TomlItem::as_table) .map_or(true, |table_option| { - table_option.map_or(true, |table| is_sorted(table.iter().map(|(name, _)| name))) + table_option.map_or(true, |table| { + is_sorted(table.get_values().iter_mut().map(|(key, _)| { + // get_values key paths always have at least one key. + key.remove(0) + })) + }) }); for dep in deps { print_action_msg(&mut options.config.shell(), &dep, &dep_table)?; diff --git a/tests/testsuite/cargo_add/mod.rs b/tests/testsuite/cargo_add/mod.rs index 37589f5a30e..d824aed0a42 100644 --- a/tests/testsuite/cargo_add/mod.rs +++ b/tests/testsuite/cargo_add/mod.rs @@ -100,6 +100,7 @@ mod quiet; mod registry; mod rename; mod require_weak; +mod sorted_table_with_dotted_item; mod target; mod target_cfg; mod unknown_inherited_feature; diff --git a/tests/testsuite/cargo_add/sorted_table_with_dotted_item/in/Cargo.toml b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/in/Cargo.toml new file mode 100644 index 00000000000..19aa939d9d6 --- /dev/null +++ b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/in/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" + +[dependencies] +toml = "0.1.1" +versioned-package = "0.1.1" + +[dependencies.my-build-package1] +version = "0.1.1" + diff --git a/tests/testsuite/cargo_add/sorted_table_with_dotted_item/in/src/lib.rs b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/in/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/sorted_table_with_dotted_item/mod.rs b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/mod.rs new file mode 100644 index 00000000000..ea17ebf222d --- /dev/null +++ b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/mod.rs @@ -0,0 +1,25 @@ +use cargo_test_support::compare::assert_ui; +use cargo_test_support::prelude::*; +use cargo_test_support::Project; + +use crate::cargo_add::init_registry; +use cargo_test_support::curr_dir; + +#[cargo_test] +fn sorted_table_with_dotted_item() { + init_registry(); + let project = Project::from_template(curr_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + snapbox::cmd::Command::cargo_ui() + .arg("add") + .arg_line("unrelateed-crate") + .current_dir(cwd) + .assert() + .success() + .stdout_matches_path(curr_dir!().join("stdout.log")) + .stderr_matches_path(curr_dir!().join("stderr.log")); + + assert_ui().subset_matches(curr_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_add/sorted_table_with_dotted_item/out/Cargo.toml b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/out/Cargo.toml new file mode 100644 index 00000000000..008ff4f62e4 --- /dev/null +++ b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/out/Cargo.toml @@ -0,0 +1,14 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" + +[dependencies] +toml = "0.1.1" +unrelateed-crate = "99999.0.0" +versioned-package = "0.1.1" + +[dependencies.my-build-package1] +version = "0.1.1" + diff --git a/tests/testsuite/cargo_add/sorted_table_with_dotted_item/stderr.log b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/stderr.log new file mode 100644 index 00000000000..be1db1c4d79 --- /dev/null +++ b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/stderr.log @@ -0,0 +1,2 @@ + Updating `dummy-registry` index + Adding unrelateed-crate v99999.0.0 to dependencies. diff --git a/tests/testsuite/cargo_add/sorted_table_with_dotted_item/stdout.log b/tests/testsuite/cargo_add/sorted_table_with_dotted_item/stdout.log new file mode 100644 index 00000000000..e69de29bb2d