fix: error handling when using compression with metadata requirements

This commit is contained in:
Marcus Holland-Moritz 2024-01-04 12:06:50 +01:00
parent 2a9f301b80
commit 4868612f4d
2 changed files with 19 additions and 1 deletions

View File

@ -1224,7 +1224,18 @@ int mkdwarfs_main(int argc, sys_char** argv, iolayer const& iol) {
categorizer_list.add_implicit_defaults(cop); categorizer_list.add_implicit_defaults(cop);
LOG_VERBOSE << cop.as_string(); LOG_VERBOSE << cop.as_string();
fsw->add_default_compressor(compression_opt.get()); {
auto bc = compression_opt.get();
if (!bc.metadata_requirements().empty()) {
throw std::runtime_error(
fmt::format("compression '{}' cannot be used without a category: "
"metadata requirements not met",
bc.describe()));
}
fsw->add_default_compressor(std::move(bc));
}
if (recompress) { if (recompress) {
compression_opt.visit_contextual( compression_opt.visit_contextual(

View File

@ -1071,3 +1071,10 @@ TEST(mkdwarfs_test, output_file_fail_close) {
EXPECT_NE(0, t.run({"-i", "/", "-o", "test.dwarfs"})) << t.err(); EXPECT_NE(0, t.run({"-i", "/", "-o", "test.dwarfs"})) << t.err();
EXPECT_THAT(t.err(), ::testing::HasSubstr("failed to close output file")); EXPECT_THAT(t.err(), ::testing::HasSubstr("failed to close output file"));
} }
TEST(mkdwarfs_test, compression_cannot_be_used) {
mkdwarfs_tester t;
EXPECT_NE(0, t.run({"-i", "/", "-o", "-", "-C", "flac"}));
EXPECT_THAT(t.err(),
::testing::HasSubstr("cannot be used without a category"));
}