mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 03:57:44 +00:00
install: better error messages when invalid arguments
executing `install` or `install file` no longer panics and insteads returns errors similar to GNU's install when it encounters similar args
This commit is contained in:
parent
c9be7ccf89
commit
172be3a8c6
1 changed files with 22 additions and 7 deletions
|
@ -18,7 +18,7 @@ use filetime::{set_file_times, FileTime};
|
|||
use uucore::backup_control::{self, BackupMode};
|
||||
use uucore::display::Quotable;
|
||||
use uucore::entries::{grp2gid, usr2uid};
|
||||
use uucore::error::{FromIo, UError, UIoError, UResult};
|
||||
use uucore::error::{FromIo, UError, UIoError, UResult, UUsageError};
|
||||
use uucore::format_usage;
|
||||
use uucore::mode::get_umask;
|
||||
use uucore::perms::{wrap_chown, Verbosity, VerbosityLevel};
|
||||
|
@ -442,11 +442,14 @@ fn is_new_file_path(path: &Path) -> bool {
|
|||
/// Returns a Result type with the Err variant containing the error message.
|
||||
///
|
||||
fn standard(mut paths: Vec<String>, b: &Behavior) -> UResult<()> {
|
||||
let target: PathBuf = b
|
||||
.target_dir
|
||||
.clone()
|
||||
.unwrap_or_else(|| paths.pop().unwrap())
|
||||
.into();
|
||||
let target: PathBuf = if let Some(path) = &b.target_dir {
|
||||
path.into()
|
||||
} else {
|
||||
paths
|
||||
.pop()
|
||||
.ok_or_else(|| UUsageError::new(1, "missing file operand"))?
|
||||
.into()
|
||||
};
|
||||
|
||||
let sources = &paths.iter().map(PathBuf::from).collect::<Vec<_>>();
|
||||
|
||||
|
@ -468,7 +471,19 @@ fn standard(mut paths: Vec<String>, b: &Behavior) -> UResult<()> {
|
|||
}
|
||||
|
||||
if target.is_file() || is_new_file_path(&target) {
|
||||
copy(&sources[0], &target, b)
|
||||
copy(
|
||||
sources.get(0).ok_or_else(|| {
|
||||
UUsageError::new(
|
||||
1,
|
||||
format!(
|
||||
"missing destination file operand after '{}'",
|
||||
target.to_str().unwrap()
|
||||
),
|
||||
)
|
||||
})?,
|
||||
&target,
|
||||
b,
|
||||
)
|
||||
} else {
|
||||
Err(InstallError::InvalidTarget(target).into())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue