Perform metadata check

This commit is contained in:
Marcus Holland-Moritz 2023-07-22 18:13:33 +02:00
parent c2da034983
commit 6ddbcad93b
2 changed files with 17 additions and 0 deletions

View File

@ -87,6 +87,13 @@ class contextual_option {
return default_ && pred(*default_);
}
template <typename T>
void visit_contextual(T&& visitor) const {
for (auto const& [ctx, val] : contextual_) {
visitor(ctx, val);
}
}
private:
std::optional<value_type> get_optional_impl(context_type const& ctx) const {
if (auto it = contextual_.find(ctx); it != contextual_.end()) {

View File

@ -1022,6 +1022,16 @@ int mkdwarfs_main(int argc, sys_char** argv) {
compressor_parser);
cop.parse(compression);
cop.dump(std::cerr);
compression_opt.visit_contextual([catmgr = options.inode.categorizer_mgr](
auto cat, block_compressor const& bc) {
if (!bc.check_metadata(catmgr->category_metadata_sample(cat))) {
throw std::runtime_error(
fmt::format("compression '{}' cannot be used for category '{}': "
"insufficient metadata",
bc.describe(), catmgr->category_name(cat)));
}
});
} catch (std::exception const& e) {
LOG_ERROR << e.what();
return 1;