Merge pull request #2277 from ycd/refactor-error-macro

uucore: refactor show_error! macro
This commit is contained in:
Sylvestre Ledru
2021-05-26 13:13:24 +02:00
committed by GitHub
46 changed files with 176 additions and 190 deletions
+1 -1
View File
@@ -347,7 +347,7 @@ fn cat_files(files: Vec<String>, options: &OutputOptions) -> Result<(), u32> {
for path in &files {
if let Err(err) = cat_path(path, &options, &mut state) {
show_info!("{}: {}", path, err);
show_error!("{}: {}", path, err);
error_count += 1;
}
}
+12 -12
View File
@@ -97,7 +97,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
if recursive {
if bit_flag == FTS_PHYSICAL {
if derefer == 1 {
show_info!("-R --dereference requires -H or -L");
show_error!("-R --dereference requires -H or -L");
return 1;
}
derefer = 0;
@@ -132,7 +132,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
dest_gid = meta.gid();
}
Err(e) => {
show_info!("failed to get attributes of '{}': {}", file, e);
show_error!("failed to get attributes of '{}': {}", file, e);
return 1;
}
}
@@ -143,7 +143,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
dest_gid = g;
}
_ => {
show_info!("invalid group: {}", matches.free[0].as_str());
show_error!("invalid group: {}", matches.free[0].as_str());
return 1;
}
}
@@ -235,8 +235,8 @@ impl Chgrper {
if let Some(p) = may_exist {
if p.parent().is_none() || self.is_bind_root(p) {
show_info!("it is dangerous to operate recursively on '/'");
show_info!("use --no-preserve-root to override this failsafe");
show_error!("it is dangerous to operate recursively on '/'");
show_error!("use --no-preserve-root to override this failsafe");
return 1;
}
}
@@ -250,12 +250,12 @@ impl Chgrper {
self.verbosity.clone(),
) {
Ok(n) => {
show_info!("{}", n);
show_error!("{}", n);
0
}
Err(e) => {
if self.verbosity != Verbosity::Silent {
show_info!("{}", e);
show_error!("{}", e);
}
1
}
@@ -275,7 +275,7 @@ impl Chgrper {
for entry in WalkDir::new(root).follow_links(follow).min_depth(1) {
let entry = unwrap!(entry, e, {
ret = 1;
show_info!("{}", e);
show_error!("{}", e);
continue;
});
let path = entry.path();
@@ -290,13 +290,13 @@ impl Chgrper {
ret = match wrap_chgrp(path, &meta, self.dest_gid, follow, self.verbosity.clone()) {
Ok(n) => {
if !n.is_empty() {
show_info!("{}", n);
show_error!("{}", n);
}
0
}
Err(e) => {
if self.verbosity != Verbosity::Silent {
show_info!("{}", e);
show_error!("{}", e);
}
1
}
@@ -313,7 +313,7 @@ impl Chgrper {
unwrap!(path.metadata(), e, {
match self.verbosity {
Silent => (),
_ => show_info!("cannot access '{}': {}", path.display(), e),
_ => show_error!("cannot access '{}': {}", path.display(), e),
}
return None;
})
@@ -321,7 +321,7 @@ impl Chgrper {
unwrap!(path.symlink_metadata(), e, {
match self.verbosity {
Silent => (),
_ => show_info!("cannot dereference '{}': {}", path.display(), e),
_ => show_error!("cannot dereference '{}': {}", path.display(), e),
}
return None;
})
+2 -2
View File
@@ -316,7 +316,7 @@ impl Chmoder {
show_error!("{}", err);
}
if self.verbose {
show_info!(
show_error!(
"failed to change mode of file '{}' from {:o} ({}) to {:o} ({})",
file.display(),
fperm,
@@ -328,7 +328,7 @@ impl Chmoder {
Err(1)
} else {
if self.verbose || self.changes {
show_info!(
show_error!(
"mode of '{}' changed from {:o} ({}) to {:o} ({})",
file.display(),
fperm,
+13 -13
View File
@@ -199,7 +199,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
if recursive {
if bit_flag == FTS_PHYSICAL {
if derefer == 1 {
show_info!("-R --dereference requires -H or -L");
show_error!("-R --dereference requires -H or -L");
return 1;
}
derefer = 0;
@@ -227,7 +227,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
Ok((Some(uid), Some(gid))) => IfFrom::UserGroup(uid, gid),
Ok((None, None)) => IfFrom::All,
Err(e) => {
show_info!("{}", e);
show_error!("{}", e);
return 1;
}
}
@@ -244,7 +244,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
dest_uid = Some(meta.uid());
}
Err(e) => {
show_info!("failed to get attributes of '{}': {}", file, e);
show_error!("failed to get attributes of '{}': {}", file, e);
return 1;
}
}
@@ -255,7 +255,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
dest_gid = g;
}
Err(e) => {
show_info!("{}", e);
show_error!("{}", e);
return 1;
}
}
@@ -377,8 +377,8 @@ impl Chowner {
if let Some(p) = may_exist {
if p.parent().is_none() {
show_info!("it is dangerous to operate recursively on '/'");
show_info!("use --no-preserve-root to override this failsafe");
show_error!("it is dangerous to operate recursively on '/'");
show_error!("use --no-preserve-root to override this failsafe");
return 1;
}
}
@@ -395,13 +395,13 @@ impl Chowner {
) {
Ok(n) => {
if !n.is_empty() {
show_info!("{}", n);
show_error!("{}", n);
}
0
}
Err(e) => {
if self.verbosity != Verbosity::Silent {
show_info!("{}", e);
show_error!("{}", e);
}
1
}
@@ -424,7 +424,7 @@ impl Chowner {
for entry in WalkDir::new(root).follow_links(follow).min_depth(1) {
let entry = unwrap!(entry, e, {
ret = 1;
show_info!("{}", e);
show_error!("{}", e);
continue;
});
let path = entry.path();
@@ -450,13 +450,13 @@ impl Chowner {
) {
Ok(n) => {
if !n.is_empty() {
show_info!("{}", n);
show_error!("{}", n);
}
0
}
Err(e) => {
if self.verbosity != Verbosity::Silent {
show_info!("{}", e);
show_error!("{}", e);
}
1
}
@@ -472,7 +472,7 @@ impl Chowner {
unwrap!(path.metadata(), e, {
match self.verbosity {
Silent => (),
_ => show_info!("cannot access '{}': {}", path.display(), e),
_ => show_error!("cannot access '{}': {}", path.display(), e),
}
return None;
})
@@ -480,7 +480,7 @@ impl Chowner {
unwrap!(path.symlink_metadata(), e, {
match self.verbosity {
Silent => (),
_ => show_info!("cannot dereference '{}': {}", path.display(), e),
_ => show_error!("cannot dereference '{}': {}", path.display(), e),
}
return None;
})
+3 -3
View File
@@ -105,7 +105,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
if out_format == OutputFmt::Unknown {
match guess_syntax() {
OutputFmt::Unknown => {
show_info!("no SHELL environment variable, and no shell type option given");
show_error!("no SHELL environment variable, and no shell type option given");
return 1;
}
fmt => out_format = fmt,
@@ -130,7 +130,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
)
}
Err(e) => {
show_info!("{}: {}", matches.free[0], e);
show_error!("{}: {}", matches.free[0], e);
return 1;
}
}
@@ -141,7 +141,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
0
}
Err(s) => {
show_info!("{}", s);
show_error!("{}", s);
1
}
}
+10 -10
View File
@@ -370,13 +370,13 @@ fn directory(paths: Vec<String>, b: Behavior) -> i32 {
// created ancestor directories will have the default mode. Hence it is safe to use
// fs::create_dir_all and then only modify the target's dir mode.
if let Err(e) = fs::create_dir_all(path) {
show_info!("{}: {}", path.display(), e);
show_error!("{}: {}", path.display(), e);
all_successful = false;
continue;
}
if b.verbose {
show_info!("creating directory '{}'", path.display());
show_error!("creating directory '{}'", path.display());
}
}
@@ -461,7 +461,7 @@ fn copy_files_into_dir(files: &[PathBuf], target_dir: &Path, b: &Behavior) -> i3
let mut all_successful = true;
for sourcepath in files.iter() {
if !sourcepath.exists() {
show_info!(
show_error!(
"cannot stat '{}': No such file or directory",
sourcepath.display()
);
@@ -471,7 +471,7 @@ fn copy_files_into_dir(files: &[PathBuf], target_dir: &Path, b: &Behavior) -> i3
}
if sourcepath.is_dir() {
show_info!("omitting directory '{}'", sourcepath.display());
show_error!("omitting directory '{}'", sourcepath.display());
all_successful = false;
continue;
}
@@ -588,10 +588,10 @@ fn copy(from: &Path, to: &Path, b: &Behavior) -> Result<(), ()> {
) {
Ok(n) => {
if !n.is_empty() {
show_info!("{}", n);
show_error!("{}", n);
}
}
Err(e) => show_info!("{}", e),
Err(e) => show_error!("{}", e),
}
}
@@ -608,10 +608,10 @@ fn copy(from: &Path, to: &Path, b: &Behavior) -> Result<(), ()> {
match wrap_chgrp(to, &meta, group_id, false, Verbosity::Normal) {
Ok(n) => {
if !n.is_empty() {
show_info!("{}", n);
show_error!("{}", n);
}
}
Err(e) => show_info!("{}", e),
Err(e) => show_error!("{}", e),
}
}
@@ -626,12 +626,12 @@ fn copy(from: &Path, to: &Path, b: &Behavior) -> Result<(), ()> {
match set_file_times(to, accessed_time, modified_time) {
Ok(_) => {}
Err(e) => show_info!("{}", e),
Err(e) => show_error!("{}", e),
}
}
if b.verbose {
show_info!("'{}' -> '{}'", from.display(), to.display());
show_error!("'{}' -> '{}'", from.display(), to.display());
}
Ok(())
+1 -1
View File
@@ -23,7 +23,7 @@ pub fn parse(mode_string: &str, considering_dir: bool) -> Result<u32, String> {
pub fn chmod(path: &Path, mode: u32) -> Result<(), ()> {
use std::os::unix::fs::PermissionsExt;
fs::set_permissions(path, fs::Permissions::from_mode(mode)).map_err(|err| {
show_info!("{}: chmod failed with error {}", path.display(), err);
show_error!("{}: chmod failed with error {}", path.display(), err);
})
}
+2 -2
View File
@@ -101,7 +101,7 @@ fn exec(dirs: Vec<String>, recursive: bool, mode: u16, verbose: bool) -> i32 {
if !recursive {
if let Some(parent) = path.parent() {
if parent != empty && !parent.exists() {
show_info!(
show_error!(
"cannot create directory '{}': No such file or directory",
path.display()
);
@@ -125,7 +125,7 @@ fn mkdir(path: &Path, recursive: bool, mode: u16, verbose: bool) -> i32 {
fs::create_dir
};
if let Err(e) = create_dir(path) {
show_info!("{}: {}", path.display(), e.to_string());
show_error!("{}: {}", path.display(), e.to_string());
return 1;
}
+1 -1
View File
@@ -136,7 +136,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
let mode = match get_mode(&matches) {
Ok(mode) => mode,
Err(err) => {
show_info!("{}", err);
show_error!("{}", err);
return 1;
}
};
+3 -3
View File
@@ -157,7 +157,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
}
if matches.is_present(OPT_TMPDIR) && PathBuf::from(prefix).is_absolute() {
show_info!(
show_error!(
"invalid template, {}; with --tmpdir, it may not be absolute",
template
);
@@ -229,7 +229,7 @@ fn exec(
}
Err(e) => {
if !quiet {
show_info!("{}: {}", e, tmpdir.display());
show_error!("{}: {}", e, tmpdir.display());
}
return 1;
}
@@ -244,7 +244,7 @@ fn exec(
Ok(f) => f,
Err(e) => {
if !quiet {
show_info!("failed to create tempfile: {}", e);
show_error!("failed to create tempfile: {}", e);
}
return 1;
}
+5 -5
View File
@@ -122,13 +122,13 @@ fn find_stdout() -> File {
.open(Path::new(NOHUP_OUT))
{
Ok(t) => {
show_info!("ignoring input and appending output to '{}'", NOHUP_OUT);
show_error!("ignoring input and appending output to '{}'", NOHUP_OUT);
t
}
Err(e1) => {
let home = match env::var("HOME") {
Err(_) => {
show_info!("failed to open '{}': {}", NOHUP_OUT, e1);
show_error!("failed to open '{}': {}", NOHUP_OUT, e1);
exit!(internal_failure_code)
}
Ok(h) => h,
@@ -143,12 +143,12 @@ fn find_stdout() -> File {
.open(&homeout)
{
Ok(t) => {
show_info!("ignoring input and appending output to '{}'", homeout_str);
show_error!("ignoring input and appending output to '{}'", homeout_str);
t
}
Err(e2) => {
show_info!("failed to open '{}': {}", NOHUP_OUT, e1);
show_info!("failed to open '{}': {}", homeout_str, e2);
show_error!("failed to open '{}': {}", NOHUP_OUT, e1);
show_error!("failed to open '{}': {}", homeout_str, e2);
exit!(internal_failure_code)
}
}
+1 -1
View File
@@ -216,7 +216,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
match result {
Err(e) => {
std::io::stdout().flush().expect("error flushing stdout");
show_info!("{}", e);
show_error!("{}", e);
1
}
_ => 0,
+3 -3
View File
@@ -749,7 +749,7 @@ impl Stater {
}
}
Err(e) => {
show_info!("cannot stat '{}': {}", file, e);
show_error!("cannot stat '{}': {}", file, e);
return 1;
}
}
@@ -842,7 +842,7 @@ impl Stater {
}
}
Err(e) => {
show_info!("cannot read file system information for '{}': {}", file, e);
show_error!("cannot read file system information for '{}': {}", file, e);
return 1;
}
}
@@ -1001,7 +1001,7 @@ pub fn uumain(args: impl uucore::Args) -> i32 {
match Stater::new(matches) {
Ok(stater) => stater.exec(),
Err(e) => {
show_info!("{}", e);
show_error!("{}", e);
1
}
}
+3 -3
View File
@@ -166,7 +166,7 @@ impl Write for MultiWriter {
let result = writer.write_all(buf);
match result {
Err(f) => {
show_info!("{}: {}", writer.name, f.to_string());
show_error!("{}: {}", writer.name, f.to_string());
false
}
_ => true,
@@ -180,7 +180,7 @@ impl Write for MultiWriter {
let result = writer.flush();
match result {
Err(f) => {
show_info!("{}: {}", writer.name, f.to_string());
show_error!("{}: {}", writer.name, f.to_string());
false
}
_ => true,
@@ -213,7 +213,7 @@ impl Read for NamedReader {
fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
match self.inner.read(buf) {
Err(f) => {
show_info!("{}: {}", Path::new("stdin").display(), f.to_string());
show_error!("{}: {}", Path::new("stdin").display(), f.to_string());
Err(f)
}
okay => okay,
+1 -10
View File
@@ -25,7 +25,7 @@ macro_rules! executable(
#[macro_export]
macro_rules! show_error(
($($args:tt)+) => ({
eprint!("{}: error: ", executable!());
eprint!("{}: ", executable!());
eprintln!($($args)+);
})
);
@@ -47,15 +47,6 @@ macro_rules! show_warning(
})
);
/// Show an info message to stderr in a silimar style to GNU coreutils.
#[macro_export]
macro_rules! show_info(
($($args:tt)+) => ({
eprint!("{}: ", executable!());
eprintln!($($args)+);
})
);
/// Show a bad inocation help message in a similar style to GNU coreutils.
#[macro_export]
macro_rules! show_usage_error(
+3 -3
View File
@@ -98,7 +98,7 @@ fn test_wrap_bad_arg() {
.arg(wrap_param)
.arg("b")
.fails()
.stderr_only("base32: error: Invalid wrap size: b: invalid digit found in string\n");
.stderr_only("base32: Invalid wrap size: b: invalid digit found in string\n");
}
}
@@ -109,7 +109,7 @@ fn test_base32_extra_operand() {
.arg("a.txt")
.arg("a.txt")
.fails()
.stderr_only("base32: error: extra operand a.txt");
.stderr_only("base32: extra operand a.txt");
}
#[test]
@@ -117,5 +117,5 @@ fn test_base32_file_not_found() {
new_ucmd!()
.arg("a.txt")
.fails()
.stderr_only("base32: error: a.txt: No such file or directory");
.stderr_only("base32: a.txt: No such file or directory");
}
+3 -3
View File
@@ -88,7 +88,7 @@ fn test_wrap_bad_arg() {
.arg(wrap_param)
.arg("b")
.fails()
.stderr_only("base64: error: Invalid wrap size: b: invalid digit found in string\n");
.stderr_only("base64: Invalid wrap size: b: invalid digit found in string\n");
}
}
@@ -99,7 +99,7 @@ fn test_base64_extra_operand() {
.arg("a.txt")
.arg("a.txt")
.fails()
.stderr_only("base64: error: extra operand a.txt");
.stderr_only("base64: extra operand a.txt");
}
#[test]
@@ -107,5 +107,5 @@ fn test_base64_file_not_found() {
new_ucmd!()
.arg("a.txt")
.fails()
.stderr_only("base64: error: a.txt: No such file or directory");
.stderr_only("base64: a.txt: No such file or directory");
}
+5 -4
View File
@@ -109,7 +109,7 @@ fn test_no_args() {
fn test_no_args_output() {
new_ucmd!()
.fails()
.stderr_is("basename: error: missing operand\nTry 'basename --help' for more information.");
.stderr_is("basename: missing operand\nTry 'basename --help' for more information.");
}
#[test]
@@ -119,9 +119,10 @@ fn test_too_many_args() {
#[test]
fn test_too_many_args_output() {
new_ucmd!().args(&["a", "b", "c"]).fails().stderr_is(
"basename: error: extra operand 'c'\nTry 'basename --help' for more information.",
);
new_ucmd!()
.args(&["a", "b", "c"])
.fails()
.stderr_is("basename: extra operand 'c'\nTry 'basename --help' for more information.");
}
#[cfg(any(unix, target_os = "redox"))]
+1 -1
View File
@@ -338,7 +338,7 @@ fn test_chmod_preserve_root() {
.arg("755")
.arg("/")
.fails()
.stderr_contains(&"chmod: error: it is dangerous to operate recursively on '/'");
.stderr_contains(&"chmod: it is dangerous to operate recursively on '/'");
}
#[test]
+3 -5
View File
@@ -21,7 +21,7 @@ fn test_enter_chroot_fails() {
assert!(result
.stderr_str()
.starts_with("chroot: error: cannot chroot to jail: Operation not permitted (os error 1)"));
.starts_with("chroot: cannot chroot to jail: Operation not permitted (os error 1)"));
}
#[test]
@@ -32,7 +32,7 @@ fn test_no_such_directory() {
ucmd.arg("a")
.fails()
.stderr_is("chroot: error: cannot change root directory to `a`: no such directory");
.stderr_is("chroot: cannot change root directory to `a`: no such directory");
}
#[test]
@@ -43,9 +43,7 @@ fn test_invalid_user_spec() {
let result = ucmd.arg("a").arg("--userspec=ARABA:").fails();
assert!(result
.stderr_str()
.starts_with("chroot: error: invalid userspec"));
assert!(result.stderr_str().starts_with("chroot: invalid userspec"));
}
#[test]

Some files were not shown because too many files have changed in this diff Show More