mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
Remove mentions to hashsum
This commit is contained in:
Generated
-10
@@ -588,7 +588,6 @@ dependencies = [
|
||||
"uu_fmt",
|
||||
"uu_fold",
|
||||
"uu_groups",
|
||||
"uu_hashsum",
|
||||
"uu_head",
|
||||
"uu_hostid",
|
||||
"uu_hostname",
|
||||
@@ -3570,15 +3569,6 @@ dependencies = [
|
||||
"uucore",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uu_hashsum"
|
||||
version = "0.6.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"fluent",
|
||||
"uucore",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uu_head"
|
||||
version = "0.6.0"
|
||||
|
||||
@@ -112,7 +112,6 @@ feat_common_core = [
|
||||
"false",
|
||||
"fmt",
|
||||
"fold",
|
||||
"hashsum",
|
||||
"head",
|
||||
"join",
|
||||
"link",
|
||||
@@ -472,7 +471,6 @@ false = { optional = true, version = "0.6.0", package = "uu_false", path = "src/
|
||||
fmt = { optional = true, version = "0.6.0", package = "uu_fmt", path = "src/uu/fmt" }
|
||||
fold = { optional = true, version = "0.6.0", package = "uu_fold", path = "src/uu/fold" }
|
||||
groups = { optional = true, version = "0.6.0", package = "uu_groups", path = "src/uu/groups" }
|
||||
hashsum = { optional = true, version = "0.6.0", package = "uu_hashsum", path = "src/uu/hashsum" }
|
||||
head = { optional = true, version = "0.6.0", package = "uu_head", path = "src/uu/head" }
|
||||
hostid = { optional = true, version = "0.6.0", package = "uu_hostid", path = "src/uu/hostid" }
|
||||
hostname = { optional = true, version = "0.6.0", package = "uu_hostname", path = "src/uu/hostname" }
|
||||
|
||||
@@ -105,9 +105,6 @@ ifeq ($(SELINUX_ENABLED),1)
|
||||
endif
|
||||
|
||||
UTILS ?= $(filter-out $(SKIP_UTILS),$(PROGS))
|
||||
ifneq ($(filter hashsum,$(UTILS)),hashsum)
|
||||
HASHSUM_PROGS :=
|
||||
endif
|
||||
|
||||
ifneq ($(findstring stdbuf,$(UTILS)),)
|
||||
# Use external libstdbuf per default. It is more robust than embedding libstdbuf.
|
||||
@@ -306,9 +303,6 @@ else
|
||||
$(foreach prog, $(INSTALLEES), \
|
||||
$(INSTALL) -m 755 $(BUILDDIR)/$(prog) $(INSTALLDIR_BIN)/$(PROG_PREFIX)$(prog) $(newline) \
|
||||
)
|
||||
$(foreach prog, $(HASHSUM_PROGS), \
|
||||
cd $(INSTALLDIR_BIN) && $(LN) $(PROG_PREFIX)hashsum $(PROG_PREFIX)$(prog) $(newline) \
|
||||
)
|
||||
$(if $(findstring test,$(INSTALLEES)), $(INSTALL) -m 755 $(BUILDDIR)/test $(INSTALLDIR_BIN)/$(PROG_PREFIX)[)
|
||||
endif
|
||||
|
||||
|
||||
@@ -87,9 +87,6 @@ pub fn main() {
|
||||
"false" | "true" => {
|
||||
phf_map.entry(krate, format!("(r#{krate}::uumain, r#{krate}::uu_app)"));
|
||||
}
|
||||
"hashsum" => {
|
||||
phf_map.entry(krate, format!("({krate}::uumain, {krate}::uu_app_custom)"));
|
||||
}
|
||||
_ => {
|
||||
phf_map.entry(krate, map_value.clone());
|
||||
}
|
||||
|
||||
@@ -53,13 +53,6 @@ packages.
|
||||
|
||||
`rm` can display a progress bar when the `-g`/`--progress` flag is set.
|
||||
|
||||
## `hashsum` (deprecated)
|
||||
|
||||
This utility does not exist in GNU coreutils. `hashsum` is a utility that
|
||||
supports computing the checksums with several algorithms. The flags and options
|
||||
are identical to the `*sum` family of utils (`sha1sum`, `sha256sum`, `b2sum`,
|
||||
etc.). This utility will be removed in the future and it is advised to use `cksum --untagged` instead.
|
||||
|
||||
## `more`
|
||||
|
||||
We provide a simple implementation of `more`, which is not part of GNU
|
||||
|
||||
@@ -83,7 +83,6 @@ static PATH_PROGRAMS: &[&str] = &[
|
||||
"vdir",
|
||||
"mkfifo",
|
||||
"mknod",
|
||||
"hashsum",
|
||||
// File I/O utilities
|
||||
"dd",
|
||||
"sync",
|
||||
@@ -252,12 +251,6 @@ fn test_program_with_non_utf8_path(program: &str, path: &Path) -> CommandResult
|
||||
OsString::from("bs=1"),
|
||||
OsString::from("count=1"),
|
||||
],
|
||||
// Hashsum needs algorithm
|
||||
"hashsum" => vec![
|
||||
OsString::from(program),
|
||||
OsString::from("--md5"),
|
||||
path_os.to_owned(),
|
||||
],
|
||||
// Encoding/decoding programs
|
||||
"base32" | "base64" | "basenc" => vec![OsString::from(program), path_os.to_owned()],
|
||||
"df" => vec![OsString::from(program), path_os.to_owned()],
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
[package]
|
||||
name = "uu_hashsum"
|
||||
description = "hashsum ~ (uutils) display or check input digests"
|
||||
repository = "https://github.com/uutils/coreutils/tree/main/src/uu/hashsum"
|
||||
version.workspace = true
|
||||
authors.workspace = true
|
||||
license.workspace = true
|
||||
homepage.workspace = true
|
||||
keywords.workspace = true
|
||||
categories.workspace = true
|
||||
edition.workspace = true
|
||||
readme.workspace = true
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
[lib]
|
||||
path = "src/hashsum.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { workspace = true }
|
||||
uucore = { workspace = true, features = ["checksum", "encoding", "sum"] }
|
||||
fluent = { workspace = true }
|
||||
|
||||
[[bin]]
|
||||
name = "hashsum"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dev-dependencies]
|
||||
uucore = { workspace = true, features = ["benchmark"] }
|
||||
@@ -1 +0,0 @@
|
||||
../../../LICENSE
|
||||
@@ -1,39 +0,0 @@
|
||||
hashsum-about = Compute and check message digests.
|
||||
hashsum-usage = hashsum --<digest> [OPTIONS]... [FILE]...
|
||||
|
||||
# Utility-specific usage template
|
||||
hashsum-usage-specific = {$utility_name} [OPTION]... [FILE]...
|
||||
|
||||
# Help messages
|
||||
hashsum-help-binary-windows = read or check in binary mode (default)
|
||||
hashsum-help-binary-other = read in binary mode
|
||||
hashsum-help-text-windows = read or check in text mode
|
||||
hashsum-help-text-other = read in text mode (default)
|
||||
hashsum-help-check = read hashsums from the FILEs and check them
|
||||
hashsum-help-tag = create a BSD-style checksum
|
||||
hashsum-help-quiet = don't print OK for each successfully verified file
|
||||
hashsum-help-status = don't output anything, status code shows success
|
||||
hashsum-help-strict = exit non-zero for improperly formatted checksum lines
|
||||
hashsum-help-ignore-missing = don't fail or report status for missing files
|
||||
hashsum-help-warn = warn about improperly formatted checksum lines
|
||||
hashsum-help-zero = end each output line with NUL, not newline
|
||||
hashsum-help-length = digest length in bits; must not exceed the max for the blake2 algorithm and must be a multiple of 8
|
||||
# Algorithm help messages
|
||||
hashsum-help-md5 = work with MD5
|
||||
hashsum-help-sha1 = work with SHA1
|
||||
hashsum-help-sha224 = work with SHA224
|
||||
hashsum-help-sha256 = work with SHA256
|
||||
hashsum-help-sha384 = work with SHA384
|
||||
hashsum-help-sha512 = work with SHA512
|
||||
hashsum-help-sha3 = work with SHA3
|
||||
hashsum-help-sha3-224 = work with SHA3-224
|
||||
hashsum-help-sha3-256 = work with SHA3-256
|
||||
hashsum-help-sha3-384 = work with SHA3-384
|
||||
hashsum-help-sha3-512 = work with SHA3-512
|
||||
hashsum-help-shake128 = work with SHAKE128 using BITS for the output size
|
||||
hashsum-help-shake256 = work with SHAKE256 using BITS for the output size
|
||||
hashsum-help-b2sum = work with BLAKE2
|
||||
hashsum-help-b3sum = work with BLAKE3
|
||||
|
||||
# Error messages
|
||||
hashsum-error-failed-to-read-input = failed to read input
|
||||
@@ -1,37 +0,0 @@
|
||||
hashsum-about = Calculer et vérifier les empreintes de messages.
|
||||
hashsum-usage = hashsum --<empreinte> [OPTION]... [FICHIER]...
|
||||
|
||||
# Messages d'aide
|
||||
hashsum-help-binary-windows = lire ou vérifier en mode binaire (par défaut)
|
||||
hashsum-help-binary-other = lire en mode binaire
|
||||
hashsum-help-text-windows = lire ou vérifier en mode texte
|
||||
hashsum-help-text-other = lire en mode texte (par défaut)
|
||||
hashsum-help-check = lire les empreintes depuis les FICHIERs et les vérifier
|
||||
hashsum-help-tag = créer une somme de contrôle de style BSD
|
||||
hashsum-help-quiet = ne pas afficher OK pour chaque fichier vérifié avec succès
|
||||
hashsum-help-status = ne rien afficher, le code de statut indique le succès
|
||||
hashsum-help-strict = sortir avec un code non-zéro pour les lignes de somme de contrôle mal formatées
|
||||
hashsum-help-ignore-missing = ne pas échouer ou rapporter le statut pour les fichiers manquants
|
||||
hashsum-help-warn = avertir des lignes de somme de contrôle mal formatées
|
||||
hashsum-help-zero = terminer chaque ligne de sortie avec NUL, pas de retour à la ligne
|
||||
hashsum-help-length = longueur de l'empreinte en bits ; ne doit pas dépasser le maximum pour l'algorithme blake2 et doit être un multiple de 8
|
||||
|
||||
# Messages d'aide des algorithmes
|
||||
hashsum-help-md5 = travailler avec MD5
|
||||
hashsum-help-sha1 = travailler avec SHA1
|
||||
hashsum-help-sha224 = travailler avec SHA224
|
||||
hashsum-help-sha256 = travailler avec SHA256
|
||||
hashsum-help-sha384 = travailler avec SHA384
|
||||
hashsum-help-sha512 = travailler avec SHA512
|
||||
hashsum-help-sha3 = travailler avec SHA3
|
||||
hashsum-help-sha3-224 = travailler avec SHA3-224
|
||||
hashsum-help-sha3-256 = travailler avec SHA3-256
|
||||
hashsum-help-sha3-384 = travailler avec SHA3-384
|
||||
hashsum-help-sha3-512 = travailler avec SHA3-512
|
||||
hashsum-help-shake128 = travailler avec SHAKE128 en utilisant BITS pour la taille de sortie
|
||||
hashsum-help-shake256 = travailler avec SHAKE256 en utilisant BITS pour la taille de sortie
|
||||
hashsum-help-b2sum = travailler avec BLAKE2
|
||||
hashsum-help-b3sum = travailler avec BLAKE3
|
||||
|
||||
# Messages d'erreur
|
||||
hashsum-error-failed-to-read-input = échec de la lecture de l'entrée
|
||||
@@ -1,408 +0,0 @@
|
||||
// This file is part of the uutils coreutils package.
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE
|
||||
// file that was distributed with this source code.
|
||||
|
||||
// spell-checker:ignore (ToDO) algo, algoname, bitlen, regexes, nread
|
||||
|
||||
use std::ffi::{OsStr, OsString};
|
||||
use std::iter;
|
||||
use std::path::Path;
|
||||
|
||||
use clap::builder::ValueParser;
|
||||
use clap::{Arg, ArgAction, ArgMatches, Command};
|
||||
|
||||
use uucore::checksum::compute::{
|
||||
ChecksumComputeOptions, OutputFormat, perform_checksum_computation,
|
||||
};
|
||||
use uucore::checksum::validate::{
|
||||
ChecksumValidateOptions, ChecksumVerbose, perform_checksum_validation,
|
||||
};
|
||||
use uucore::checksum::{
|
||||
AlgoKind, ChecksumError, SizedAlgoKind, calculate_blake2b_length_str,
|
||||
sanitize_sha2_sha3_length_str,
|
||||
};
|
||||
use uucore::error::UResult;
|
||||
use uucore::line_ending::LineEnding;
|
||||
use uucore::{format_usage, translate};
|
||||
|
||||
const NAME: &str = "hashsum";
|
||||
|
||||
/// Creates a hasher instance based on the command-line flags.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `matches` - A reference to the `ArgMatches` object containing the command-line arguments.
|
||||
///
|
||||
/// # Returns
|
||||
///
|
||||
/// Returns a [`UResult`] of a tuple containing the algorithm name, the hasher instance, and
|
||||
/// the output length in bits or an Err if multiple hash algorithms are specified or if a
|
||||
/// required flag is missing.
|
||||
#[allow(clippy::cognitive_complexity)]
|
||||
fn create_algorithm_from_flags(matches: &ArgMatches) -> UResult<(AlgoKind, Option<usize>)> {
|
||||
let mut alg: Option<(AlgoKind, Option<usize>)> = None;
|
||||
|
||||
let mut set_or_err = |new_alg: (AlgoKind, Option<usize>)| -> UResult<()> {
|
||||
if alg.is_some() {
|
||||
return Err(ChecksumError::CombineMultipleAlgorithms.into());
|
||||
}
|
||||
alg = Some(new_alg);
|
||||
Ok(())
|
||||
};
|
||||
|
||||
if matches.get_flag("md5") {
|
||||
set_or_err((AlgoKind::Md5, None))?;
|
||||
}
|
||||
if matches.get_flag("sha1") {
|
||||
set_or_err((AlgoKind::Sha1, None))?;
|
||||
}
|
||||
if matches.get_flag("sha224") {
|
||||
set_or_err((AlgoKind::Sha224, None))?;
|
||||
}
|
||||
if matches.get_flag("sha256") {
|
||||
set_or_err((AlgoKind::Sha256, None))?;
|
||||
}
|
||||
if matches.get_flag("sha384") {
|
||||
set_or_err((AlgoKind::Sha384, None))?;
|
||||
}
|
||||
if matches.get_flag("sha512") {
|
||||
set_or_err((AlgoKind::Sha512, None))?;
|
||||
}
|
||||
if matches.get_flag("b2sum") {
|
||||
set_or_err((AlgoKind::Blake2b, None))?;
|
||||
}
|
||||
if matches.get_flag("b3sum") {
|
||||
set_or_err((AlgoKind::Blake3, None))?;
|
||||
}
|
||||
if matches.get_flag("sha3") {
|
||||
match matches.get_one::<String>(options::LENGTH) {
|
||||
Some(len) => set_or_err((
|
||||
AlgoKind::Sha3,
|
||||
Some(sanitize_sha2_sha3_length_str(AlgoKind::Sha3, len)?),
|
||||
))?,
|
||||
None => return Err(ChecksumError::LengthRequired("SHA3".into()).into()),
|
||||
}
|
||||
}
|
||||
if matches.get_flag("sha3-224") {
|
||||
set_or_err((AlgoKind::Sha3, Some(224)))?;
|
||||
}
|
||||
if matches.get_flag("sha3-256") {
|
||||
set_or_err((AlgoKind::Sha3, Some(256)))?;
|
||||
}
|
||||
if matches.get_flag("sha3-384") {
|
||||
set_or_err((AlgoKind::Sha3, Some(384)))?;
|
||||
}
|
||||
if matches.get_flag("sha3-512") {
|
||||
set_or_err((AlgoKind::Sha3, Some(512)))?;
|
||||
}
|
||||
if matches.get_flag("shake128") {
|
||||
set_or_err((AlgoKind::Shake128, Some(128)))?;
|
||||
}
|
||||
if matches.get_flag("shake256") {
|
||||
set_or_err((AlgoKind::Shake256, Some(256)))?;
|
||||
}
|
||||
|
||||
if alg.is_none() {
|
||||
return Err(ChecksumError::NeedAlgorithmToHash.into());
|
||||
}
|
||||
|
||||
Ok(alg.unwrap())
|
||||
}
|
||||
|
||||
#[uucore::main]
|
||||
pub fn uumain(mut args: impl uucore::Args) -> UResult<()> {
|
||||
// if there is no program name for some reason, default to "hashsum"
|
||||
let program = args.next().unwrap_or_else(|| OsString::from(NAME));
|
||||
let binary_name = Path::new(&program)
|
||||
.file_stem()
|
||||
.unwrap_or_else(|| OsStr::new(NAME))
|
||||
.to_string_lossy();
|
||||
|
||||
let args = iter::once(program.clone()).chain(args);
|
||||
|
||||
let (command, is_hashsum_bin) = uu_app(&binary_name);
|
||||
|
||||
// FIXME: this should use try_get_matches_from() and crash!(), but at the moment that just
|
||||
// causes "error: " to be printed twice (once from crash!() and once from clap). With
|
||||
// the current setup, the name of the utility is not printed, but I think this is at
|
||||
// least somewhat better from a user's perspective.
|
||||
let matches = uucore::clap_localization::handle_clap_result(command, args)?;
|
||||
|
||||
let length: Option<usize> = if binary_name == "b2sum" {
|
||||
if let Some(len) = matches.get_one::<String>(options::LENGTH) {
|
||||
calculate_blake2b_length_str(len)?
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let (algo_kind, length) = if is_hashsum_bin {
|
||||
create_algorithm_from_flags(&matches)?
|
||||
} else {
|
||||
(AlgoKind::from_bin_name(&binary_name)?, length)
|
||||
};
|
||||
|
||||
let check = matches.get_flag("check");
|
||||
|
||||
let check_flag = |flag| match (check, matches.get_flag(flag)) {
|
||||
(_, false) => Ok(false),
|
||||
(true, true) => Ok(true),
|
||||
(false, true) => Err(ChecksumError::CheckOnlyFlag(flag.into())),
|
||||
};
|
||||
|
||||
// Each of the following flags are only expected in --check mode.
|
||||
// If we encounter them otherwise, end with an error.
|
||||
let ignore_missing = check_flag("ignore-missing")?;
|
||||
let warn = check_flag("warn")?;
|
||||
let quiet = check_flag("quiet")?;
|
||||
let strict = check_flag("strict")?;
|
||||
let status = check_flag("status")?;
|
||||
|
||||
// clap provides the default value -. So we unwrap() safety.
|
||||
let files = matches
|
||||
.get_many::<OsString>(options::FILE)
|
||||
.unwrap()
|
||||
.map(|s| s.as_os_str());
|
||||
|
||||
if check {
|
||||
// on Windows, allow --binary/--text to be used with --check
|
||||
// and keep the behavior of defaulting to binary
|
||||
#[cfg(not(windows))]
|
||||
{
|
||||
let text_flag = matches.get_flag("text");
|
||||
let binary_flag = matches.get_flag("binary");
|
||||
|
||||
if binary_flag || text_flag {
|
||||
return Err(ChecksumError::BinaryTextConflict.into());
|
||||
}
|
||||
}
|
||||
|
||||
let verbose = ChecksumVerbose::new(status, quiet, warn);
|
||||
|
||||
let opts = ChecksumValidateOptions {
|
||||
ignore_missing,
|
||||
strict,
|
||||
verbose,
|
||||
};
|
||||
|
||||
// Execute the checksum validation
|
||||
return perform_checksum_validation(files, Some(algo_kind), length, opts);
|
||||
}
|
||||
|
||||
let algo = SizedAlgoKind::from_unsized(algo_kind, length)?;
|
||||
let line_ending = LineEnding::from_zero_flag(matches.get_flag("zero"));
|
||||
let output_format = OutputFormat::from_standalone(std::env::args_os())?;
|
||||
|
||||
let opts = ChecksumComputeOptions {
|
||||
algo_kind: algo,
|
||||
output_format,
|
||||
line_ending,
|
||||
};
|
||||
|
||||
// Show the hashsum of the input
|
||||
perform_checksum_computation(opts, files)
|
||||
}
|
||||
|
||||
mod options {
|
||||
//pub const ALGORITHM: &str = "algorithm";
|
||||
pub const FILE: &str = "file";
|
||||
//pub const UNTAGGED: &str = "untagged";
|
||||
pub const TAG: &str = "tag";
|
||||
pub const LENGTH: &str = "length";
|
||||
//pub const RAW: &str = "raw";
|
||||
//pub const BASE64: &str = "base64";
|
||||
pub const CHECK: &str = "check";
|
||||
pub const STRICT: &str = "strict";
|
||||
pub const TEXT: &str = "text";
|
||||
pub const BINARY: &str = "binary";
|
||||
pub const STATUS: &str = "status";
|
||||
pub const WARN: &str = "warn";
|
||||
pub const QUIET: &str = "quiet";
|
||||
}
|
||||
|
||||
pub fn uu_app_common() -> Command {
|
||||
Command::new(uucore::util_name())
|
||||
.version(uucore::crate_version!())
|
||||
.help_template(uucore::localized_help_template(uucore::util_name()))
|
||||
.about(translate!("hashsum-about"))
|
||||
.override_usage(format_usage(&translate!("hashsum-usage")))
|
||||
.infer_long_args(true)
|
||||
.args_override_self(true)
|
||||
.arg(
|
||||
Arg::new(options::BINARY)
|
||||
.short('b')
|
||||
.long("binary")
|
||||
.help({
|
||||
#[cfg(windows)]
|
||||
{
|
||||
translate!("hashsum-help-binary-windows")
|
||||
}
|
||||
#[cfg(not(windows))]
|
||||
{
|
||||
translate!("hashsum-help-binary-other")
|
||||
}
|
||||
})
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::CHECK)
|
||||
.short('c')
|
||||
.long("check")
|
||||
.help(translate!("hashsum-help-check"))
|
||||
.action(ArgAction::SetTrue)
|
||||
.conflicts_with("tag"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::TAG)
|
||||
.long("tag")
|
||||
.help(translate!("hashsum-help-tag"))
|
||||
.action(ArgAction::SetTrue)
|
||||
.conflicts_with("text"),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::TEXT)
|
||||
.short('t')
|
||||
.long("text")
|
||||
.help({
|
||||
#[cfg(windows)]
|
||||
{
|
||||
translate!("hashsum-help-text-windows")
|
||||
}
|
||||
#[cfg(not(windows))]
|
||||
{
|
||||
translate!("hashsum-help-text-other")
|
||||
}
|
||||
})
|
||||
.conflicts_with("binary")
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::QUIET)
|
||||
.short('q')
|
||||
.long(options::QUIET)
|
||||
.help(translate!("hashsum-help-quiet"))
|
||||
.action(ArgAction::SetTrue)
|
||||
.overrides_with_all([options::STATUS, options::WARN]),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::STATUS)
|
||||
.short('s')
|
||||
.long("status")
|
||||
.help(translate!("hashsum-help-status"))
|
||||
.action(ArgAction::SetTrue)
|
||||
.overrides_with_all([options::QUIET, options::WARN]),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::STRICT)
|
||||
.long("strict")
|
||||
.help(translate!("hashsum-help-strict"))
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("ignore-missing")
|
||||
.long("ignore-missing")
|
||||
.help(translate!("hashsum-help-ignore-missing"))
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::WARN)
|
||||
.short('w')
|
||||
.long("warn")
|
||||
.help(translate!("hashsum-help-warn"))
|
||||
.action(ArgAction::SetTrue)
|
||||
.overrides_with_all([options::QUIET, options::STATUS]),
|
||||
)
|
||||
.arg(
|
||||
Arg::new("zero")
|
||||
.short('z')
|
||||
.long("zero")
|
||||
.help(translate!("hashsum-help-zero"))
|
||||
.action(ArgAction::SetTrue),
|
||||
)
|
||||
.arg(
|
||||
Arg::new(options::FILE)
|
||||
.index(1)
|
||||
.action(ArgAction::Append)
|
||||
.value_name(options::FILE)
|
||||
.default_value("-")
|
||||
.hide_default_value(true)
|
||||
.value_hint(clap::ValueHint::FilePath)
|
||||
.value_parser(ValueParser::os_string()),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn uu_app_length() -> Command {
|
||||
uu_app_opt_length(uu_app_common())
|
||||
}
|
||||
|
||||
fn uu_app_opt_length(command: Command) -> Command {
|
||||
command.arg(
|
||||
Arg::new(options::LENGTH)
|
||||
.long(options::LENGTH)
|
||||
.short('l')
|
||||
.help(translate!("hashsum-help-length"))
|
||||
.overrides_with(options::LENGTH)
|
||||
.action(ArgAction::Set),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn uu_app_custom() -> Command {
|
||||
let mut command = uu_app_opt_length(uu_app_common());
|
||||
let algorithms = &[
|
||||
("md5", translate!("hashsum-help-md5")),
|
||||
("sha1", translate!("hashsum-help-sha1")),
|
||||
("sha224", translate!("hashsum-help-sha224")),
|
||||
("sha256", translate!("hashsum-help-sha256")),
|
||||
("sha384", translate!("hashsum-help-sha384")),
|
||||
("sha512", translate!("hashsum-help-sha512")),
|
||||
("sha3", translate!("hashsum-help-sha3")),
|
||||
("sha3-224", translate!("hashsum-help-sha3-224")),
|
||||
("sha3-256", translate!("hashsum-help-sha3-256")),
|
||||
("sha3-384", translate!("hashsum-help-sha3-384")),
|
||||
("sha3-512", translate!("hashsum-help-sha3-512")),
|
||||
("shake128", translate!("hashsum-help-shake128")),
|
||||
("shake256", translate!("hashsum-help-shake256")),
|
||||
("b2sum", translate!("hashsum-help-b2sum")),
|
||||
("b3sum", translate!("hashsum-help-b3sum")),
|
||||
];
|
||||
|
||||
for (name, desc) in algorithms {
|
||||
command = command.arg(
|
||||
Arg::new(*name)
|
||||
.long(name)
|
||||
.help(desc)
|
||||
.action(ArgAction::SetTrue),
|
||||
);
|
||||
}
|
||||
command
|
||||
}
|
||||
|
||||
/// hashsum is handled differently in build.rs
|
||||
/// therefore, this is different from other utilities.
|
||||
fn uu_app(binary_name: &str) -> (Command, bool) {
|
||||
let (command, is_hashsum_bin) = match binary_name {
|
||||
// These all support the same options.
|
||||
"md5sum" | "sha1sum" | "sha224sum" | "sha256sum" | "sha384sum" | "sha512sum" => {
|
||||
(uu_app_common(), false)
|
||||
}
|
||||
// b2sum supports the md5sum options plus -l/--length.
|
||||
"b2sum" => (uu_app_length(), false),
|
||||
// We're probably just being called as `hashsum`, so give them everything.
|
||||
_ => (uu_app_custom(), true),
|
||||
};
|
||||
|
||||
// If not called as generic hashsum, override the command name and usage
|
||||
let command = if is_hashsum_bin {
|
||||
command
|
||||
} else {
|
||||
let usage = translate!("hashsum-usage-specific", "utility_name" => binary_name);
|
||||
command
|
||||
.help_template(uucore::localized_help_template(binary_name))
|
||||
.override_usage(format_usage(&usage))
|
||||
};
|
||||
|
||||
(command, is_hashsum_bin)
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
uucore::bin!(uu_hashsum);
|
||||
@@ -286,12 +286,7 @@ fn test_check_b2sum_strict_check() {
|
||||
|
||||
#[test]
|
||||
fn test_help_shows_correct_utility_name() {
|
||||
// Test that help output shows the actual utility name instead of "hashsum"
|
||||
let scene = TestScenario::new(util_name!());
|
||||
|
||||
// Test b2sum
|
||||
scene
|
||||
.ccmd("b2sum")
|
||||
new_ucmd!()
|
||||
.arg("--help")
|
||||
.succeeds()
|
||||
.stdout_contains("Usage: b2sum")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -155,8 +155,6 @@ fn test_conflicting_arg() {
|
||||
|
||||
#[test]
|
||||
fn test_help_shows_correct_utility_name() {
|
||||
// Test that help output shows the actual utility name instead of "hashsum"
|
||||
|
||||
new_ucmd!()
|
||||
.arg("--help")
|
||||
.succeeds()
|
||||
|
||||
@@ -172,7 +172,6 @@ fn test_check_sha256_binary() {
|
||||
|
||||
#[test]
|
||||
fn test_help_shows_correct_utility_name() {
|
||||
// Test that help output shows the actual utility name instead of "hashsum"
|
||||
new_ucmd!()
|
||||
.arg("--help")
|
||||
.succeeds()
|
||||
|
||||
@@ -113,7 +113,6 @@ fn test_conflicting_arg() {
|
||||
|
||||
#[test]
|
||||
fn test_help_shows_correct_utility_name() {
|
||||
// Test that help output shows the actual utility name instead of "hashsum"
|
||||
new_ucmd!()
|
||||
.arg("--help")
|
||||
.succeeds()
|
||||
|
||||
@@ -113,7 +113,6 @@ fn test_conflicting_arg() {
|
||||
|
||||
#[test]
|
||||
fn test_help_shows_correct_utility_name() {
|
||||
// Test that help output shows the actual utility name instead of "hashsum"
|
||||
new_ucmd!()
|
||||
.arg("--help")
|
||||
.succeeds()
|
||||
|
||||
@@ -132,15 +132,6 @@ fn test_error_messages_have_colors() {
|
||||
println!("Testing error colors for {utility}");
|
||||
|
||||
let mut cmd = create_utility_command(utility);
|
||||
let uu_name = format!("uu_{utility}");
|
||||
let binary_name = uucore::get_canonical_util_name(&uu_name);
|
||||
|
||||
// For hashsum aliases, we need to pass the hash algorithm as a subcommand
|
||||
if binary_name == "hashsum" && utility != "hashsum" {
|
||||
// Extract the hash algorithm from the utility name
|
||||
let algo = utility.trim_end_matches("sum");
|
||||
cmd.arg(algo);
|
||||
}
|
||||
|
||||
let output = cmd
|
||||
.arg("--invalid-option-that-should-not-exist")
|
||||
@@ -232,15 +223,6 @@ fn test_error_messages_french_translation() {
|
||||
println!("Testing French error translation for {utility}");
|
||||
|
||||
let mut cmd = create_utility_command(utility);
|
||||
let uu_name = format!("uu_{utility}");
|
||||
let binary_name = uucore::get_canonical_util_name(&uu_name);
|
||||
|
||||
// For hashsum aliases, we need to pass the hash algorithm as a subcommand
|
||||
if binary_name == "hashsum" && utility != "hashsum" {
|
||||
// Extract the hash algorithm from the utility name
|
||||
let algo = utility.trim_end_matches("sum");
|
||||
cmd.arg(algo);
|
||||
}
|
||||
|
||||
let output = cmd
|
||||
.arg("--invalid-option-that-should-not-exist")
|
||||
@@ -285,15 +267,6 @@ fn test_french_colored_error_messages() {
|
||||
println!("Testing French colored errors for {utility}");
|
||||
|
||||
let mut cmd = create_utility_command(utility);
|
||||
let uu_name = format!("uu_{utility}");
|
||||
let binary_name = uucore::get_canonical_util_name(&uu_name);
|
||||
|
||||
// For hashsum aliases, we need to pass the hash algorithm as a subcommand
|
||||
if binary_name == "hashsum" && utility != "hashsum" {
|
||||
// Extract the hash algorithm from the utility name
|
||||
let algo = utility.trim_end_matches("sum");
|
||||
cmd.arg(algo);
|
||||
}
|
||||
|
||||
let output = cmd
|
||||
.arg("--invalid-option-that-should-not-exist")
|
||||
|
||||
@@ -172,10 +172,6 @@ mod test_fold;
|
||||
#[path = "by-util/test_groups.rs"]
|
||||
mod test_groups;
|
||||
|
||||
#[cfg(feature = "hashsum")]
|
||||
#[path = "by-util/test_hashsum.rs"]
|
||||
mod test_hashsum;
|
||||
|
||||
#[cfg(feature = "head")]
|
||||
#[path = "by-util/test_head.rs"]
|
||||
mod test_head;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user