Skip to content

Commit

Permalink
Merge pull request #6524 from sylvestre/cksum-3
Browse files Browse the repository at this point in the history
cksum: read the next file when the first is missing or invalid
  • Loading branch information
cakebaker authored Jul 3, 2024
2 parents 14230e3 + a6c5ee5 commit a18c132
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 5 deletions.
19 changes: 15 additions & 4 deletions src/uucore/src/lib/features/checksum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -473,16 +473,26 @@ where
// Use stdin if "-" is specified
Box::new(stdin())
} else {
get_input_file(filename_input)?
match get_input_file(filename_input) {
Ok(f) => f,
Err(e) => {
// Could not read the file, show the error and continue to the next file
show_error!("{e}");
set_exit_code(1);
continue;
}
}
};

let reader = BufReader::new(file);
let lines: Vec<String> = reader.lines().collect::<Result<_, _>>()?;
let Some((chosen_regex, is_algo_based_format)) = determine_regex(&lines) else {
return Err(ChecksumError::NoProperlyFormattedChecksumLinesFound {
let e = ChecksumError::NoProperlyFormattedChecksumLinesFound {
filename: get_filename_for_output(filename_input, input_is_stdin),
}
.into());
};
show_error!("{e}");
set_exit_code(1);
continue;
};

for (i, line) in lines.iter().enumerate() {
Expand Down Expand Up @@ -624,6 +634,7 @@ where
// if any incorrectly formatted line, show it
cksum_output(&res, ignore_missing, status);
}

Ok(())
}

Expand Down
31 changes: 30 additions & 1 deletion tests/by-util/test_cksum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//
// For the full copyright and license information, please view the LICENSE
// file that was distributed with this source code.
// spell-checker:ignore (words) asdf algo algos
// spell-checker:ignore (words) asdf algo algos mgmt

use crate::common::util::TestScenario;

Expand Down Expand Up @@ -1221,3 +1221,32 @@ fn test_check_base64_hashes() {
.succeeds()
.stdout_is("empty: OK\nempty: OK\nempty: OK\n");
}

#[test]
fn test_several_files_error_mgmt() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;

// don't exist
scene
.ucmd()
.arg("--check")
.arg("empty")
.arg("incorrect")
.fails()
.stderr_contains("empty: No such file ")
.stderr_contains("incorrect: No such file ");

at.touch("empty");
at.touch("incorrect");

// exists but incorrect
scene
.ucmd()
.arg("--check")
.arg("empty")
.arg("incorrect")
.fails()
.stderr_contains("empty: no properly ")
.stderr_contains("incorrect: no properly ");
}

0 comments on commit a18c132

Please sign in to comment.