Skip to content

Commit abe410e

Browse files
author
oech3
committed
cksum: Move handle_tag_text_binary_flags to clap
1 parent 23f1a1e commit abe410e

File tree

2 files changed

+8
-40
lines changed

2 files changed

+8
-40
lines changed

src/uu/cksum/src/cksum.rs

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -74,42 +74,6 @@ mod options {
7474
/// Returns a pair of boolean. The first one indicates if we should use tagged
7575
/// output format, the second one indicates if we should use the binary flag in
7676
/// the untagged case.
77-
fn handle_tag_text_binary_flags<S: AsRef<OsStr>>(
78-
args: impl Iterator<Item = S>,
79-
) -> UResult<(bool, bool)> {
80-
let mut tag = true;
81-
let mut binary = false;
82-
let mut text = false;
83-
84-
// --binary, --tag and --untagged are tight together: none of them
85-
// conflicts with each other but --tag will reset "binary" and "text" and
86-
// set "tag".
87-
88-
for arg in args {
89-
let arg = arg.as_ref();
90-
if arg == "-b" || arg == "--binary" {
91-
text = false;
92-
binary = true;
93-
} else if arg == "--text" {
94-
text = true;
95-
binary = false;
96-
} else if arg == "--tag" {
97-
tag = true;
98-
binary = false;
99-
text = false;
100-
} else if arg == "--untagged" {
101-
tag = false;
102-
}
103-
}
104-
105-
// Specifying --text without ever mentioning --untagged fails.
106-
if text && tag {
107-
return Err(ChecksumError::TextWithoutUntagged.into());
108-
}
109-
110-
Ok((tag, binary))
111-
}
112-
11377
/// Sanitize the `--length` argument depending on `--algorithm` and `--length`.
11478
fn maybe_sanitize_length(
11579
algo_cli: Option<AlgoKind>,
@@ -208,7 +172,8 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
208172
// Set the default algorithm to CRC when not '--check'ing.
209173
let algo_kind = algo_cli.unwrap_or(AlgoKind::Crc);
210174

211-
let (tag, binary) = handle_tag_text_binary_flags(std::env::args_os())?;
175+
let tag = matches.get_flag(options::TAG) || !matches.get_flag(options::UNTAGGED);
176+
let binary = matches.get_flag(options::BINARY);
212177

213178
let algo = SizedAlgoKind::from_unsized(algo_kind, length)?;
214179
let line_ending = LineEnding::from_zero_flag(matches.get_flag(options::ZERO));
@@ -265,7 +230,9 @@ pub fn uu_app() -> Command {
265230
.long(options::TAG)
266231
.help(translate!("cksum-help-tag"))
267232
.action(ArgAction::SetTrue)
268-
.overrides_with(options::UNTAGGED),
233+
.overrides_with(options::UNTAGGED)
234+
.overrides_with(options::BINARY)
235+
.overrides_with(options::TEXT),
269236
)
270237
.arg(
271238
Arg::new(options::LENGTH)
@@ -308,7 +275,8 @@ pub fn uu_app() -> Command {
308275
.short('t')
309276
.hide(true)
310277
.overrides_with(options::BINARY)
311-
.action(ArgAction::SetTrue),
278+
.action(ArgAction::SetTrue)
279+
.requires(options::UNTAGGED),
312280
)
313281
.arg(
314282
Arg::new(options::BINARY)

tests/by-util/test_cksum.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ mod output_format {
10661066
.args(&["-a", "md5"])
10671067
.arg(at.subdir.join("f"))
10681068
.fails_with_code(1)
1069-
.stderr_contains("--text mode is only supported with --untagged");
1069+
.stderr_contains("the following required arguments were not provided"); //clap does not change the meaning
10701070
}
10711071

10721072
#[test]

0 commit comments

Comments
 (0)