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:
parent
536dd90ce5
commit
d46e5df3d3
2 changed files with 45 additions and 6 deletions
|
@ -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);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue