mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 03:57:44 +00:00
ls: remove case-insensitivity and leading period of name sort
This commit is contained in:
parent
28c7800f73
commit
361408cbe5
3 changed files with 5 additions and 10 deletions
|
@ -36,6 +36,8 @@ args="$@"
|
||||||
hyperfine "ls $args" "target/release/coreutils ls $args"
|
hyperfine "ls $args" "target/release/coreutils ls $args"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Note**: No localization is currently implemented. This means that the comparison above is not really fair. We can fix this by setting `LC_ALL=C`, so GNU `ls` can ignore localization.
|
||||||
|
|
||||||
## Checking system call count
|
## Checking system call count
|
||||||
|
|
||||||
- Another thing to look at would be system calls count using strace (on linux) or equivalent on other operating systems.
|
- Another thing to look at would be system calls count using strace (on linux) or equivalent on other operating systems.
|
||||||
|
|
|
@ -1244,14 +1244,8 @@ fn sort_entries(entries: &mut Vec<PathData>, config: &Config) {
|
||||||
entries.sort_by_key(|k| Reverse(k.md().as_ref().map(|md| md.len()).unwrap_or(0)))
|
entries.sort_by_key(|k| Reverse(k.md().as_ref().map(|md| md.len()).unwrap_or(0)))
|
||||||
}
|
}
|
||||||
// The default sort in GNU ls is case insensitive
|
// The default sort in GNU ls is case insensitive
|
||||||
Sort::Name => entries.sort_by_cached_key(|k| {
|
Sort::Name => entries.sort_by(|a, b| a.file_name.cmp(&b.file_name)),
|
||||||
let has_dot: bool = k.file_name.starts_with('.');
|
Sort::Version => entries.sort_by(|a, b| version_cmp::version_cmp(&a.p_buf, &b.p_buf)),
|
||||||
let filename_nodot: &str = &k.file_name[if has_dot { 1 } else { 0 }..];
|
|
||||||
// We want hidden files to appear before regular files of the same
|
|
||||||
// name, so we need to negate the "has_dot" variable.
|
|
||||||
(filename_nodot.to_lowercase(), !has_dot)
|
|
||||||
}),
|
|
||||||
Sort::Version => entries.sort_by(|k, j| version_cmp::version_cmp(&k.p_buf, &j.p_buf)),
|
|
||||||
Sort::Extension => entries.sort_by(|a, b| {
|
Sort::Extension => entries.sort_by(|a, b| {
|
||||||
a.p_buf
|
a.p_buf
|
||||||
.extension()
|
.extension()
|
||||||
|
|
|
@ -527,7 +527,6 @@ fn test_ls_sort_name() {
|
||||||
.succeeds()
|
.succeeds()
|
||||||
.stdout_is(["test-1", "test-2", "test-3\n"].join(sep));
|
.stdout_is(["test-1", "test-2", "test-3\n"].join(sep));
|
||||||
|
|
||||||
// Order of a named sort ignores leading dots.
|
|
||||||
let scene_dot = TestScenario::new(util_name!());
|
let scene_dot = TestScenario::new(util_name!());
|
||||||
let at = &scene_dot.fixtures;
|
let at = &scene_dot.fixtures;
|
||||||
at.touch(".a");
|
at.touch(".a");
|
||||||
|
@ -540,7 +539,7 @@ fn test_ls_sort_name() {
|
||||||
.arg("--sort=name")
|
.arg("--sort=name")
|
||||||
.arg("-A")
|
.arg("-A")
|
||||||
.succeeds()
|
.succeeds()
|
||||||
.stdout_is([".a", "a", ".b", "b\n"].join(sep));
|
.stdout_is([".a", ".b", "a", "b\n"].join(sep));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue