mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
hashsum: warn on file not found rather than fail
This commit is contained in:
parent
536dd90ce5
commit
d46e5df3d3
2 changed files with 45 additions and 6 deletions
|
@ -498,7 +498,8 @@ where
|
|||
I: Iterator<Item = &'a OsStr>,
|
||||
{
|
||||
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 { " " };
|
||||
for filename in files {
|
||||
let filename = Path::new(filename);
|
||||
|
@ -574,8 +575,19 @@ where
|
|||
}
|
||||
},
|
||||
};
|
||||
let f = File::open(ck_filename)
|
||||
.map_err_context(|| "failed to open file".to_string())?;
|
||||
let f = match File::open(ck_filename) {
|
||||
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 real_sum = digest_reader(
|
||||
&mut options.digest,
|
||||
|
@ -602,7 +614,7 @@ where
|
|||
if !options.status {
|
||||
println!("{}: FAILED", ck_filename);
|
||||
}
|
||||
failed += 1;
|
||||
failed_cksum += 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -628,8 +640,15 @@ where
|
|||
Ordering::Greater => show_warning!("{} lines are improperly formatted", bad_format),
|
||||
_ => {}
|
||||
};
|
||||
if failed > 0 {
|
||||
show_warning!("{} computed checksum did NOT match", failed);
|
||||
if failed_cksum > 0 {
|
||||
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);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -117,6 +117,26 @@ fn test_check_sha1() {
|
|||
.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]
|
||||
fn test_invalid_arg() {
|
||||
new_ucmd!().arg("--definitely-invalid").fails().code_is(1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue