Allow categorizer selection on command line

This commit is contained in:
Marcus Holland-Moritz 2023-07-18 14:53:42 +02:00
parent 0fe8be7ad5
commit f30910e79b

View File

@ -315,11 +315,12 @@ int mkdwarfs_main(int argc, sys_char** argv) {
std::string memory_limit, script_arg, compression, header, schema_compression, std::string memory_limit, script_arg, compression, header, schema_compression,
metadata_compression, log_level_str, timestamp, time_resolution, order, metadata_compression, log_level_str, timestamp, time_resolution, order,
progress_mode, recompress_opts, pack_metadata, file_hash_algo, progress_mode, recompress_opts, pack_metadata, file_hash_algo,
debug_filter, max_similarity_size, input_list_str, chmod_str; debug_filter, max_similarity_size, input_list_str, chmod_str,
categorizer_list_str;
std::vector<sys_string> filter; std::vector<sys_string> filter;
size_t num_workers, num_scanner_workers; size_t num_workers, num_scanner_workers;
bool no_progress = false, remove_header = false, no_section_index = false, bool no_progress = false, remove_header = false, no_section_index = false,
force_overwrite = false, enable_categorizer = false; force_overwrite = false;
unsigned level; unsigned level;
int compress_niceness; int compress_niceness;
uint16_t uid, gid; uint16_t uid, gid;
@ -345,6 +346,12 @@ int mkdwarfs_main(int argc, sys_char** argv) {
auto file_hash_desc = "choice of file hashing function (none, " + auto file_hash_desc = "choice of file hashing function (none, " +
(from(hash_list) | unsplit(", ")) + ")"; (from(hash_list) | unsplit(", ")) + ")";
auto& catreg = categorizer_registry::instance();
auto categorize_desc = "enable categorizers in the given order (" +
(from(catreg.categorizer_names()) | unsplit(", ")) +
")";
// clang-format off // clang-format off
po::options_description basic_opts("Options"); po::options_description basic_opts("Options");
basic_opts.add_options() basic_opts.add_options()
@ -393,8 +400,9 @@ int mkdwarfs_main(int argc, sys_char** argv) {
po::value<std::string>(&recompress_opts)->implicit_value("all"), po::value<std::string>(&recompress_opts)->implicit_value("all"),
"recompress an existing filesystem (none, block, metadata, all)") "recompress an existing filesystem (none, block, metadata, all)")
("categorize", ("categorize",
po::value<bool>(&enable_categorizer)->zero_tokens(), po::value<std::string>(&categorizer_list_str)
"WIP enable categorizer") ->default_value("pcmaudio,incompressible"),
categorize_desc.c_str())
("order", ("order",
po::value<std::string>(&order), po::value<std::string>(&order),
order_desc.c_str()) order_desc.c_str())
@ -514,7 +522,6 @@ int mkdwarfs_main(int argc, sys_char** argv) {
.add(filesystem_opts) .add(filesystem_opts)
.add(metadata_opts); .add(metadata_opts);
auto& catreg = categorizer_registry::instance();
catreg.add_options(opts); catreg.add_options(opts);
po::variables_map vm; po::variables_map vm;
@ -1028,11 +1035,16 @@ int mkdwarfs_main(int argc, sys_char** argv) {
options.file_order.mode == file_order_mode::SIMILARITY; options.file_order.mode == file_order_mode::SIMILARITY;
options.inode.with_nilsimsa = options.inode.with_nilsimsa =
options.file_order.mode == file_order_mode::NILSIMSA; options.file_order.mode == file_order_mode::NILSIMSA;
if (enable_categorizer) {
if (!categorizer_list_str.empty()) {
std::vector<std::string> categorizer_list;
boost::split(categorizer_list, categorizer_list_str,
boost::is_any_of(","));
options.inode.categorizer_mgr = options.inode.categorizer_mgr =
std::make_shared<categorizer_manager>(lgr); std::make_shared<categorizer_manager>(lgr);
// TODO
for (auto const& name : catreg.categorizer_names()) { for (auto const& name : categorizer_list) {
options.inode.categorizer_mgr->add(catreg.create(lgr, name, vm)); options.inode.categorizer_mgr->add(catreg.create(lgr, name, vm));
} }
} }