diff --git a/src/uu/join/src/join.rs b/src/uu/join/src/join.rs index 0050bf0c32d..61b972b247f 100644 --- a/src/uu/join/src/join.rs +++ b/src/uu/join/src/join.rs @@ -849,12 +849,10 @@ fn parse_settings(matches: &clap::ArgMatches, diag_args: Option<&[OsString]>) -> settings.empty = empty.as_bytes().to_vec(); } - if matches.get_flag("nocheck-order") { - settings.check_order = CheckOrder::Disabled; - } - if matches.get_flag("check-order") { settings.check_order = CheckOrder::Enabled; + } else if matches.get_flag("nocheck-order") { + settings.check_order = CheckOrder::Disabled; } if matches.get_flag("header") { @@ -1016,12 +1014,14 @@ pub fn uu_app() -> Command { Arg::new("check-order") .long("check-order") .help(translate!("join-help-check-order")) + .overrides_with("nocheck-order") .action(ArgAction::SetTrue), ) .arg( Arg::new("nocheck-order") .long("nocheck-order") .help(translate!("join-help-nocheck-order")) + .overrides_with("check-order") .action(ArgAction::SetTrue), ) .arg( diff --git a/tests/by-util/test_join.rs b/tests/by-util/test_join.rs index 21334bd6b67..b8224a29385 100644 --- a/tests/by-util/test_join.rs +++ b/tests/by-util/test_join.rs @@ -1038,3 +1038,32 @@ fn test_missing_key_is_empty_key() { .succeeds() .stdout_only("1002 bob\n"); } + +#[test] +fn check_order_nocheck_order_last_wins() { + // --nocheck-order after --check-order: nocheck wins, unsorted input succeeds. + let ts = TestScenario::new(util_name!()); + let at = &ts.fixtures; + at.write("unsorted.txt", "b\na\n"); + ts.ucmd() + .args(&[ + "--check-order", + "--nocheck-order", + "unsorted.txt", + "unsorted.txt", + ]) + .succeeds() + .stdout_contains("a") + .stdout_contains("b"); + + // --check-order after --nocheck-order: check wins, unsorted input fails. + ts.ucmd() + .args(&[ + "--nocheck-order", + "--check-order", + "unsorted.txt", + "unsorted.txt", + ]) + .fails() + .stderr_contains("is not sorted"); +}