1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

hashsum: warn on file not found rather than fail

This commit is contained in:
David Matos 2022-10-19 20:09:56 +02:00
parent 536dd90ce5
commit d46e5df3d3
2 changed files with 45 additions and 6 deletions

View file

@ -498,7 +498,8 @@ where
I: Iterator<Item = &'a OsStr>, I: Iterator<Item = &'a OsStr>,
{ {
let mut bad_format = 0; let mut bad_format = 0;
let mut failed = 0; let mut failed_cksum = 0;
let mut failed_open_file = 0;
let binary_marker = if options.binary { "*" } else { " " }; let binary_marker = if options.binary { "*" } else { " " };
for filename in files { for filename in files {
let filename = Path::new(filename); let filename = Path::new(filename);
@ -574,8 +575,19 @@ where
} }
}, },
}; };
let f = File::open(ck_filename) let f = match File::open(ck_filename) {
.map_err_context(|| "failed to open file".to_string())?; Err(_) => {
failed_open_file += 1;
println!(
"{}: {}: No such file or directory",
uucore::util_name(),
ck_filename
);
println!("{}: FAILED open or read", ck_filename);
continue;
}
Ok(file) => file,
};
let mut ckf = BufReader::new(Box::new(f) as Box<dyn Read>); let mut ckf = BufReader::new(Box::new(f) as Box<dyn Read>);
let real_sum = digest_reader( let real_sum = digest_reader(
&mut options.digest, &mut options.digest,
@ -602,7 +614,7 @@ where
if !options.status { if !options.status {
println!("{}: FAILED", ck_filename); println!("{}: FAILED", ck_filename);
} }
failed += 1; failed_cksum += 1;
} }
} }
} else { } else {
@ -628,8 +640,15 @@ where
Ordering::Greater => show_warning!("{} lines are improperly formatted", bad_format), Ordering::Greater => show_warning!("{} lines are improperly formatted", bad_format),
_ => {} _ => {}
}; };
if failed > 0 { if failed_cksum > 0 {
show_warning!("{} computed checksum did NOT match", failed); show_warning!("{} computed checksum did NOT match", failed_cksum);
}
match failed_open_file.cmp(&1) {
Ordering::Equal => show_warning!("{} listed file could not be read", failed_open_file),
Ordering::Greater => {
show_warning!("{} listed files could not be read", failed_open_file);
}
_ => {}
} }
} }

View file

@ -117,6 +117,26 @@ fn test_check_sha1() {
.stderr_is(""); .stderr_is("");
} }
#[test]
fn test_check_file_not_found_warning() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
at.write("testf", "foobar\n");
at.write(
"testf.sha1",
"988881adc9fc3655077dc2d4d757d480b5ea0e11 testf\n",
);
at.remove("testf");
scene
.ccmd("sha1sum")
.arg("-c")
.arg(at.subdir.join("testf.sha1"))
.succeeds()
.stdout_is("sha1sum: testf: No such file or directory\ntestf: FAILED open or read\n")
.stderr_is("sha1sum: warning: 1 listed file could not be read");
}
#[test] #[test]
fn test_invalid_arg() { fn test_invalid_arg() {
new_ucmd!().arg("--definitely-invalid").fails().code_is(1); new_ucmd!().arg("--definitely-invalid").fails().code_is(1);