From bbb4958baa6ea03f1cfed1f13f1728a1f42e841f Mon Sep 17 00:00:00 2001 From: Thomas Frans Date: Wed, 27 Sep 2023 23:08:13 +0200 Subject: [PATCH] ls: ignore capitalization while sorting - Ignore capitalization when sorting entries, just like the GNU version does. --- src/uu/ls/src/ls.rs | 6 +++++- tests/by-util/test_ls.rs | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/uu/ls/src/ls.rs b/src/uu/ls/src/ls.rs index 301aefaf3a3..9f346ebb3c0 100644 --- a/src/uu/ls/src/ls.rs +++ b/src/uu/ls/src/ls.rs @@ -1958,7 +1958,11 @@ fn sort_entries(entries: &mut [PathData], config: &Config, out: &mut BufWriter entries.sort_by_key(|k| Reverse(k.md(out).map(|md| md.len()).unwrap_or(0))), // The default sort in GNU ls is case insensitive - Sort::Name => entries.sort_by(|a, b| a.display_name.cmp(&b.display_name)), + Sort::Name => entries.sort_by(|a, b| { + a.display_name + .to_ascii_lowercase() + .cmp(&b.display_name.to_ascii_lowercase()) + }), Sort::Version => entries.sort_by(|a, b| { version_cmp(&a.p_buf.to_string_lossy(), &b.p_buf.to_string_lossy()) .then(a.p_buf.to_string_lossy().cmp(&b.p_buf.to_string_lossy())) diff --git a/tests/by-util/test_ls.rs b/tests/by-util/test_ls.rs index 23dfafa3200..6dc081cd8aa 100644 --- a/tests/by-util/test_ls.rs +++ b/tests/by-util/test_ls.rs @@ -1582,6 +1582,18 @@ fn test_ls_sort_name() { .arg("-A") .succeeds() .stdout_is(".a\n.b\na\nb\n"); + + let scene_capitalization = TestScenario::new(util_name!()); + let at = &scene_capitalization.fixtures; + at.touch("ctest"); + at.touch("atest"); + at.touch("Btest"); + + scene_capitalization + .ucmd() + .arg("--sort=name") + .succeeds() + .stdout_is("atest\nBtest\nctest\n"); } #[test]