mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
Sort: More small fixes (#2065)
* Various fixes and performance improvements * fix a typo Co-authored-by: Michael Debertol <michael.debertol@gmail.com> * Fix month parse for months with leading whitespace * Implement test for months whitespace fix * Confirm human numeric works as expected with whitespace with a test * Correct arg help value name for --parallel * Fix SemVer non version lines/empty line sorting with a test Co-authored-by: Sylvestre Ledru <sledru@mozilla.com> Co-authored-by: Michael Debertol <michael.debertol@gmail.com>
This commit is contained in:
parent
279656426b
commit
a76d452f75
9 changed files with 94 additions and 6 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1,7 +1,5 @@
|
||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "advapi32-sys"
|
name = "advapi32-sys"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
|
|
@ -677,7 +677,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name(OPT_PARALLEL)
|
Arg::with_name(OPT_PARALLEL)
|
||||||
.long(OPT_PARALLEL)
|
.long(OPT_PARALLEL)
|
||||||
.help("change the number of threads running concurrently to N")
|
.help("change the number of threads running concurrently to NUM_THREADS")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.value_name("NUM_THREADS"),
|
.value_name("NUM_THREADS"),
|
||||||
)
|
)
|
||||||
|
@ -1226,7 +1226,7 @@ fn month_parse(line: &str) -> Month {
|
||||||
// GNU splits at any 3 letter match "JUNNNN" is JUN
|
// GNU splits at any 3 letter match "JUNNNN" is JUN
|
||||||
let pattern = if line.trim().len().ge(&3) {
|
let pattern = if line.trim().len().ge(&3) {
|
||||||
// Split a 3 and get first element of tuple ".0"
|
// Split a 3 and get first element of tuple ".0"
|
||||||
line.split_at(3).0
|
line.trim().split_at(3).0
|
||||||
} else {
|
} else {
|
||||||
""
|
""
|
||||||
};
|
};
|
||||||
|
@ -1262,10 +1262,21 @@ fn month_compare(a: &str, b: &str) -> Ordering {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn version_parse(a: &str) -> Version {
|
||||||
|
let result = Version::parse(a);
|
||||||
|
|
||||||
|
match result {
|
||||||
|
Ok(vers_a) => vers_a,
|
||||||
|
// Non-version lines parse to 0.0.0
|
||||||
|
Err(_e) => Version::parse("0.0.0").unwrap(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn version_compare(a: &str, b: &str) -> Ordering {
|
fn version_compare(a: &str, b: &str) -> Ordering {
|
||||||
#![allow(clippy::comparison_chain)]
|
#![allow(clippy::comparison_chain)]
|
||||||
let ver_a = Version::parse(a);
|
let ver_a = version_parse(a);
|
||||||
let ver_b = Version::parse(b);
|
let ver_b = version_parse(b);
|
||||||
|
|
||||||
// Version::cmp is not implemented; implement comparison directly
|
// Version::cmp is not implemented; implement comparison directly
|
||||||
if ver_a > ver_b {
|
if ver_a > ver_b {
|
||||||
Ordering::Greater
|
Ordering::Greater
|
||||||
|
|
|
@ -8,6 +8,25 @@ fn test_helper(file_name: &str, args: &str) {
|
||||||
.stdout_is_fixture(format!("{}.expected", file_name));
|
.stdout_is_fixture(format!("{}.expected", file_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_months_whitespace() {
|
||||||
|
test_helper("months-whitespace", "-M");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_version_empty_lines() {
|
||||||
|
new_ucmd!()
|
||||||
|
.arg("-V")
|
||||||
|
.arg("version-empty-lines.txt")
|
||||||
|
.succeeds()
|
||||||
|
.stdout_is("\n\n\n\n\n\n\n1.2.3-alpha\n1.2.3-alpha2\n\t\t\t1.12.4\n11.2.3\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_human_numeric_whitespace() {
|
||||||
|
test_helper("human-numeric-whitespace", "-h");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_multiple_decimals_general() {
|
fn test_multiple_decimals_general() {
|
||||||
new_ucmd!()
|
new_ucmd!()
|
||||||
|
|
11
tests/fixtures/sort/human-numeric-whitespace.expected
vendored
Normal file
11
tests/fixtures/sort/human-numeric-whitespace.expected
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
456K
|
||||||
|
4568K
|
||||||
|
456M
|
||||||
|
6.2G
|
11
tests/fixtures/sort/human-numeric-whitespace.txt
vendored
Normal file
11
tests/fixtures/sort/human-numeric-whitespace.txt
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
|
||||||
|
456K
|
||||||
|
|
||||||
|
456M
|
||||||
|
|
||||||
|
|
||||||
|
4568K
|
||||||
|
|
||||||
|
6.2G
|
||||||
|
|
8
tests/fixtures/sort/months-whitespace.expected
vendored
Normal file
8
tests/fixtures/sort/months-whitespace.expected
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
JAN
|
||||||
|
FEb
|
||||||
|
apr
|
||||||
|
apr
|
||||||
|
JUNNNN
|
||||||
|
AUG
|
8
tests/fixtures/sort/months-whitespace.txt
vendored
Normal file
8
tests/fixtures/sort/months-whitespace.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
JAN
|
||||||
|
JUNNNN
|
||||||
|
AUG
|
||||||
|
|
||||||
|
apr
|
||||||
|
apr
|
||||||
|
|
||||||
|
FEb
|
11
tests/fixtures/sort/version-empty-lines.expected
vendored
Normal file
11
tests/fixtures/sort/version-empty-lines.expected
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1.2.3-alpha
|
||||||
|
1.2.3-alpha2
|
||||||
|
11.2.3
|
||||||
|
1.12.4
|
11
tests/fixtures/sort/version-empty-lines.txt
vendored
Normal file
11
tests/fixtures/sort/version-empty-lines.txt
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
11.2.3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1.2.3-alpha2
|
||||||
|
|
||||||
|
|
||||||
|
1.2.3-alpha
|
||||||
|
|
||||||
|
|
||||||
|
1.12.4
|
Loading…
Add table
Add a link
Reference in a new issue