Merge pull request #4860 from cakebaker/cksum_implement_untagged

cksum: implement --untagged
This commit is contained in:
Sylvestre Ledru 2023-05-14 19:42:53 +02:00 committed by GitHub
commit 49c16a2f11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 135 additions and 9 deletions

View file

@ -6,7 +6,7 @@
// file that was distributed with this source code.
// spell-checker:ignore (ToDO) fname, algo
use clap::{crate_version, Arg, Command};
use clap::{crate_version, Arg, ArgAction, Command};
use hex::encode;
use std::ffi::OsStr;
use std::fs::File;
@ -103,6 +103,7 @@ struct Options {
algo_name: &'static str,
digest: Box<dyn Digest + 'static>,
output_bits: usize,
untagged: bool,
}
/// Calculate checksum
@ -161,12 +162,20 @@ where
),
(ALGORITHM_OPTIONS_CRC, true) => println!("{sum} {sz}"),
(ALGORITHM_OPTIONS_CRC, false) => println!("{sum} {sz} {}", filename.display()),
(ALGORITHM_OPTIONS_BLAKE2B, _) => println!("BLAKE2b ({}) = {sum}", filename.display()),
_ => println!(
"{} ({}) = {sum}",
options.algo_name.to_ascii_uppercase(),
filename.display()
),
(ALGORITHM_OPTIONS_BLAKE2B, _) if !options.untagged => {
println!("BLAKE2b ({}) = {sum}", filename.display());
}
_ => {
if options.untagged {
println!("{sum} {}", filename.display());
} else {
println!(
"{} ({}) = {sum}",
options.algo_name.to_ascii_uppercase(),
filename.display()
);
}
}
}
}
@ -208,8 +217,9 @@ fn digest_read<T: Read>(
}
mod options {
pub static FILE: &str = "file";
pub static ALGORITHM: &str = "algorithm";
pub const ALGORITHM: &str = "algorithm";
pub const FILE: &str = "file";
pub const UNTAGGED: &str = "untagged";
}
#[uucore::main]
@ -228,6 +238,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
algo_name: name,
digest: algo,
output_bits: bits,
untagged: matches.get_flag(options::UNTAGGED),
};
match matches.get_many::<String>(options::FILE) {
@ -270,5 +281,11 @@ pub fn uu_app() -> Command {
ALGORITHM_OPTIONS_SM3,
]),
)
.arg(
Arg::new(options::UNTAGGED)
.long(options::UNTAGGED)
.help("create a reversed style checksum, without digest type")
.action(ArgAction::SetTrue),
)
.after_help(AFTER_HELP)
}

View file

@ -159,3 +159,68 @@ fn test_algorithm_stdin() {
}
}
}
#[test]
fn test_untagged_single_file() {
new_ucmd!()
.arg("--untagged")
.arg("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture("untagged/crc_single_file.expected");
}
#[test]
fn test_untagged_multiple_files() {
new_ucmd!()
.arg("--untagged")
.arg("lorem_ipsum.txt")
.arg("alice_in_wonderland.txt")
.succeeds()
.stdout_is_fixture("untagged/crc_multiple_files.expected");
}
#[test]
fn test_untagged_stdin() {
new_ucmd!()
.arg("--untagged")
.pipe_in_fixture("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture("untagged/crc_stdin.expected");
}
#[test]
fn test_untagged_algorithm_single_file() {
for algo in ALGOS {
new_ucmd!()
.arg("--untagged")
.arg(format!("--algorithm={algo}"))
.arg("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture(format!("untagged/{algo}_single_file.expected"));
}
}
#[test]
fn test_untagged_algorithm_multiple_files() {
for algo in ALGOS {
new_ucmd!()
.arg("--untagged")
.arg(format!("--algorithm={algo}"))
.arg("lorem_ipsum.txt")
.arg("alice_in_wonderland.txt")
.succeeds()
.stdout_is_fixture(format!("untagged/{algo}_multiple_files.expected"));
}
}
#[test]
fn test_untagged_algorithm_stdin() {
for algo in ALGOS {
new_ucmd!()
.arg("--untagged")
.arg(format!("--algorithm={algo}"))
.pipe_in_fixture("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture(format!("untagged/{algo}_stdin.expected"));
}
}

View file

@ -0,0 +1,2 @@
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 lorem_ipsum.txt
91b8b0f0868e905ad18b8ac35e4a1dacd289857b19258ab5d1e071761af758b0134ec152d4f011fe1825ca889c80c2e072ca70eb50548c25fc49a98937515af4 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 lorem_ipsum.txt

View file

@ -0,0 +1 @@
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 -

View file

@ -0,0 +1,2 @@
08109 1 lorem_ipsum.txt
01814 1 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
08109 1 lorem_ipsum.txt

View file

@ -0,0 +1 @@
08109 1

View file

@ -0,0 +1,2 @@
378294376 772 lorem_ipsum.txt
3805907707 302 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
378294376 772 lorem_ipsum.txt

View file

@ -0,0 +1 @@
378294376 772

View file

@ -0,0 +1,2 @@
cd724690f7dc61775dfac400a71f2caa lorem_ipsum.txt
f6fa7033e16166a9589aa1c0388ffd58 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
cd724690f7dc61775dfac400a71f2caa lorem_ipsum.txt

View file

@ -0,0 +1 @@
cd724690f7dc61775dfac400a71f2caa -

View file

@ -0,0 +1,2 @@
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef lorem_ipsum.txt
22b54b2520e8b4fa59eb10719028a4e587c12d1e alice_in_wonderland.txt

View file

@ -0,0 +1 @@
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef lorem_ipsum.txt

View file

@ -0,0 +1 @@
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef -

View file

@ -0,0 +1,2 @@
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 lorem_ipsum.txt
54c9c7d78458886418ce0845111fc49fe1c628ffd4bf3da14226ffd9 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 lorem_ipsum.txt

View file

@ -0,0 +1 @@
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 -

View file

@ -0,0 +1,2 @@
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 lorem_ipsum.txt
14ab7e5a0aa3a670222744714bc96961d51012cb216225d965db71824a46e5fe alice_in_wonderland.txt

View file

@ -0,0 +1 @@
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 lorem_ipsum.txt

View file

@ -0,0 +1 @@
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 -

View file

@ -0,0 +1,2 @@
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb lorem_ipsum.txt
b7966c97ef84ab5858db2e0cdd33fbaf4fa8346d84de65aba001e738c242598a43272854d0073ad1099404eaa1d93766 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb lorem_ipsum.txt

View file

@ -0,0 +1 @@
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb -

View file

@ -0,0 +1,2 @@
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 lorem_ipsum.txt
251646d5a7eb481e0f3aced7839d78dd5e97153f822dc55938e17059c485990d85d602e2881b528b565ab6262584a69c97b068b26bda81acc9356c53c7c1c96d alice_in_wonderland.txt

View file

@ -0,0 +1 @@
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 lorem_ipsum.txt

View file

@ -0,0 +1 @@
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 -

View file

@ -0,0 +1,2 @@
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 lorem_ipsum.txt
d66617ae3c4e87828298dcd836f79efbab488c53b84e09c3e8e83a16c902418d alice_in_wonderland.txt

View file

@ -0,0 +1 @@
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 lorem_ipsum.txt

View file

@ -0,0 +1 @@
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 -

View file

@ -0,0 +1,2 @@
6985 2 lorem_ipsum.txt
27441 1 alice_in_wonderland.txt

View file

@ -0,0 +1 @@
6985 2 lorem_ipsum.txt

View file

@ -0,0 +1 @@
6985 2