From e45c56b926cdd8d5c346513fd06c3569085588ef Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Sun, 29 Dec 2024 00:17:22 +0100 Subject: [PATCH] ch*: also remove duplications for deref & no deref --- src/uu/chgrp/src/chgrp.rs | 20 +++----------------- src/uu/chmod/src/chmod.rs | 12 ++++++++++-- src/uu/chown/src/chown.rs | 23 ++--------------------- src/uucore/src/lib/features/perms.rs | 17 ++++++++++++++++- 4 files changed, 31 insertions(+), 41 deletions(-) diff --git a/src/uu/chgrp/src/chgrp.rs b/src/uu/chgrp/src/chgrp.rs index 7f68f7b13..16f67144a 100644 --- a/src/uu/chgrp/src/chgrp.rs +++ b/src/uu/chgrp/src/chgrp.rs @@ -73,7 +73,7 @@ pub fn uu_app() -> Command { Arg::new(options::HELP) .long(options::HELP) .help("Print help information.") - .action(ArgAction::Help) + .action(ArgAction::Help), ) .arg( Arg::new(options::verbosity::CHANGES) @@ -101,20 +101,6 @@ pub fn uu_app() -> Command { .help("output a diagnostic for every file processed") .action(ArgAction::SetTrue), ) - .arg( - Arg::new(options::dereference::DEREFERENCE) - .long(options::dereference::DEREFERENCE) - .action(ArgAction::SetTrue), - ) - .arg( - Arg::new(options::dereference::NO_DEREFERENCE) - .short('h') - .long(options::dereference::NO_DEREFERENCE) - .help( - "affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)", - ) - .action(ArgAction::SetTrue), - ) .arg( Arg::new(options::preserve_root::PRESERVE) .long(options::preserve_root::PRESERVE) @@ -142,8 +128,8 @@ pub fn uu_app() -> Command { .action(ArgAction::SetTrue), ); - // Add traverse-related arguments - for arg in uucore::perms::traverse_args() { + // Add common arguments with chgrp, chown & chmod + for arg in uucore::perms::common_args() { cmd = cmd.arg(arg); } diff --git a/src/uu/chmod/src/chmod.rs b/src/uu/chmod/src/chmod.rs index 07c04a98d..f62f66503 100644 --- a/src/uu/chmod/src/chmod.rs +++ b/src/uu/chmod/src/chmod.rs @@ -23,6 +23,7 @@ const USAGE: &str = help_usage!("chmod.md"); const LONG_USAGE: &str = help_section!("after help", "chmod.md"); mod options { + pub const HELP: &str = "help"; pub const CHANGES: &str = "changes"; pub const QUIET: &str = "quiet"; // visible_alias("silent") pub const VERBOSE: &str = "verbose"; @@ -158,6 +159,13 @@ pub fn uu_app() -> Command { .args_override_self(true) .infer_long_args(true) .no_binary_name(true) + .disable_help_flag(true) + .arg( + Arg::new(options::HELP) + .long(options::HELP) + .help("Print help information.") + .action(ArgAction::Help), + ) .arg( Arg::new(options::CHANGES) .long(options::CHANGES) @@ -218,8 +226,8 @@ pub fn uu_app() -> Command { .value_hint(clap::ValueHint::AnyPath), ); - // Add traverse-related arguments - for arg in uucore::perms::traverse_args() { + // Add common arguments with chgrp, chown & chmod + for arg in uucore::perms::common_args() { cmd = cmd.arg(arg); } diff --git a/src/uu/chown/src/chown.rs b/src/uu/chown/src/chown.rs index 61fe24eab..d8cb14fa3 100644 --- a/src/uu/chown/src/chown.rs +++ b/src/uu/chown/src/chown.rs @@ -96,25 +96,6 @@ pub fn uu_app() -> Command { .help("like verbose but report only when a change is made") .action(ArgAction::SetTrue), ) - .arg( - Arg::new(options::dereference::DEREFERENCE) - .long(options::dereference::DEREFERENCE) - .help( - "affect the referent of each symbolic link (this is the default), \ - rather than the symbolic link itself", - ) - .action(ArgAction::SetTrue), - ) - .arg( - Arg::new(options::dereference::NO_DEREFERENCE) - .short('h') - .long(options::dereference::NO_DEREFERENCE) - .help( - "affect symbolic links instead of any referenced file \ - (useful only on systems that can change the ownership of a symlink)", - ) - .action(ArgAction::SetTrue), - ) .arg( Arg::new(options::FROM) .long(options::FROM) @@ -173,8 +154,8 @@ pub fn uu_app() -> Command { .action(ArgAction::SetTrue), ); - // Add traverse-related arguments - for arg in uucore::perms::traverse_args() { + // Add common arguments with chgrp, chown & chmod + for arg in uucore::perms::common_args() { cmd = cmd.arg(arg); } diff --git a/src/uucore/src/lib/features/perms.rs b/src/uucore/src/lib/features/perms.rs index 9b59f7259..73b84be72 100644 --- a/src/uucore/src/lib/features/perms.rs +++ b/src/uucore/src/lib/features/perms.rs @@ -636,7 +636,7 @@ pub fn chown_base( executor.exec() } -pub fn traverse_args() -> Vec { +pub fn common_args() -> Vec { vec![ Arg::new(traverse::TRAVERSE) .short(traverse::TRAVERSE.chars().next().unwrap()) @@ -653,6 +653,21 @@ pub fn traverse_args() -> Vec { .help("do not traverse any symbolic links (default)") .overrides_with_all([traverse::TRAVERSE, traverse::EVERY]) .action(clap::ArgAction::SetTrue), + Arg::new(options::dereference::DEREFERENCE) + .long(options::dereference::DEREFERENCE) + .help( + "affect the referent of each symbolic link (this is the default), \ + rather than the symbolic link itself", + ) + .action(clap::ArgAction::SetTrue), + Arg::new(options::dereference::NO_DEREFERENCE) + .short('h') + .long(options::dereference::NO_DEREFERENCE) + .help( + "affect symbolic links instead of any referenced file \ + (useful only on systems that can change the ownership of a symlink)", + ) + .action(clap::ArgAction::SetTrue), ] }