Skip to content

Commit

Permalink
hashsum: warn on file not found rather than fail
Browse files Browse the repository at this point in the history
  • Loading branch information
dmatos2012 committed Oct 19, 2022
1 parent 536dd90 commit d46e5df
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 6 deletions.
31 changes: 25 additions & 6 deletions src/uu/hashsum/src/hashsum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand All @@ -602,7 +614,7 @@ where
if !options.status {
println!("{}: FAILED", ck_filename);
}
failed += 1;
failed_cksum += 1;
}
}
} else {
Expand All @@ -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);
}
_ => {}
}
}

Expand Down
20 changes: 20 additions & 0 deletions tests/by-util/test_hashsum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit d46e5df

Please sign in to comment.