Skip to content

Commit bcb76ac

Browse files
authored
cp: let clap render help & version (#8199)
* cp: let clap render help & version * cp: use get_many instead of remove_many from clap
2 parents 19e04a2 + a6e104f commit bcb76ac

1 file changed

Lines changed: 23 additions & 36 deletions

File tree

src/uu/cp/src/cp.rs

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use thiserror::Error;
2323

2424
use platform::copy_on_write;
2525
use uucore::display::Quotable;
26-
use uucore::error::{UClapError, UError, UResult, UUsageError, set_exit_code};
26+
use uucore::error::{UError, UResult, UUsageError, set_exit_code};
2727
#[cfg(unix)]
2828
use uucore::fs::make_fifo;
2929
use uucore::fs::{
@@ -796,46 +796,33 @@ pub fn uu_app() -> Command {
796796

797797
#[uucore::main]
798798
pub fn uumain(args: impl uucore::Args) -> UResult<()> {
799-
let matches = uu_app().try_get_matches_from(args);
799+
let matches = uu_app().try_get_matches_from(args)?;
800800

801-
// The error is parsed here because we do not want version or help being printed to stderr.
802-
if let Err(e) = matches {
803-
let mut app = uu_app();
801+
let options = Options::from_matches(&matches)?;
804802

805-
match e.kind() {
806-
clap::error::ErrorKind::DisplayHelp => {
807-
app.print_help()?;
808-
}
809-
clap::error::ErrorKind::DisplayVersion => print!("{}", app.render_version()),
810-
_ => return Err(Box::new(e.with_exit_code(1))),
811-
};
812-
} else if let Ok(mut matches) = matches {
813-
let options = Options::from_matches(&matches)?;
814-
815-
if options.overwrite == OverwriteMode::NoClobber && options.backup != BackupMode::None {
816-
return Err(UUsageError::new(
817-
EXIT_ERR,
818-
"options --backup and --no-clobber are mutually exclusive",
819-
));
820-
}
803+
if options.overwrite == OverwriteMode::NoClobber && options.backup != BackupMode::None {
804+
return Err(UUsageError::new(
805+
EXIT_ERR,
806+
"options --backup and --no-clobber are mutually exclusive",
807+
));
808+
}
821809

822-
let paths: Vec<PathBuf> = matches
823-
.remove_many::<OsString>(options::PATHS)
824-
.map(|v| v.map(PathBuf::from).collect())
825-
.unwrap_or_default();
810+
let paths: Vec<PathBuf> = matches
811+
.get_many::<OsString>(options::PATHS)
812+
.map(|v| v.map(PathBuf::from).collect())
813+
.unwrap_or_default();
826814

827-
let (sources, target) = parse_path_args(paths, &options)?;
815+
let (sources, target) = parse_path_args(paths, &options)?;
828816

829-
if let Err(error) = copy(&sources, &target, &options) {
830-
match error {
831-
// Error::NotAllFilesCopied is non-fatal, but the error
832-
// code should still be EXIT_ERR as does GNU cp
833-
CpError::NotAllFilesCopied => {}
834-
// Else we caught a fatal bubbled-up error, log it to stderr
835-
_ => show_error!("{error}"),
836-
};
837-
set_exit_code(EXIT_ERR);
838-
}
817+
if let Err(error) = copy(&sources, &target, &options) {
818+
match error {
819+
// Error::NotAllFilesCopied is non-fatal, but the error
820+
// code should still be EXIT_ERR as does GNU cp
821+
CpError::NotAllFilesCopied => {}
822+
// Else we caught a fatal bubbled-up error, log it to stderr
823+
_ => show_error!("{error}"),
824+
};
825+
set_exit_code(EXIT_ERR);
839826
}
840827

841828
Ok(())

0 commit comments

Comments
 (0)