From ad9bae8618d0068a5fe15f95e18318ee0683b3fe Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 18 Dec 2023 21:45:33 +0100 Subject: [PATCH] fix: ensure common options (like --log-level) are consistent --- include/dwarfs/logger.h | 2 ++ include/dwarfs/tool.h | 5 +++++ src/dwarfs/logger.cpp | 4 ++++ src/dwarfs/tool.cpp | 16 ++++++++++++++++ src/dwarfs_main.cpp | 2 +- src/dwarfsck_main.cpp | 7 ++----- src/dwarfsextract_main.cpp | 7 ++----- src/mkdwarfs_main.cpp | 8 +++----- 8 files changed, 35 insertions(+), 16 deletions(-) diff --git a/include/dwarfs/logger.h b/include/dwarfs/logger.h index 3c9465a9..4ebd9b80 100644 --- a/include/dwarfs/logger.h +++ b/include/dwarfs/logger.h @@ -73,6 +73,8 @@ class logger { static level_type parse_level(std::string_view level); + static std::string all_level_names(); + private: std::string policy_name_; // TODO: const? }; diff --git a/include/dwarfs/tool.h b/include/dwarfs/tool.h index 6de89cda..0b5b6395 100644 --- a/include/dwarfs/tool.h +++ b/include/dwarfs/tool.h @@ -24,9 +24,14 @@ #include #include +#include + namespace dwarfs { std::string tool_header(std::string_view tool_name, std::string_view extra_info = ""); +void add_common_options(boost::program_options::options_description& opts, + std::string& log_level_str); + } // namespace dwarfs diff --git a/src/dwarfs/logger.cpp b/src/dwarfs/logger.cpp index a81e5ead..264b73db 100644 --- a/src/dwarfs/logger.cpp +++ b/src/dwarfs/logger.cpp @@ -65,6 +65,10 @@ logger::level_type logger::parse_level(std::string_view level) { DWARFS_THROW(runtime_error, fmt::format("invalid logger level: {}", level)); } +std::string logger::all_level_names() { + return "error, warn, info, verbose, debug, trace"; +} + stream_logger::stream_logger(std::ostream& os, level_type threshold, bool with_context) : os_(os) diff --git a/src/dwarfs/tool.cpp b/src/dwarfs/tool.cpp index f34d8c4d..abdb1481 100644 --- a/src/dwarfs/tool.cpp +++ b/src/dwarfs/tool.cpp @@ -21,6 +21,7 @@ #include +#include "dwarfs/logger.h" #include "dwarfs/tool.h" #include "dwarfs/version.h" @@ -39,4 +40,19 @@ tool_header(std::string_view tool_name, std::string_view extra_info) { tool_name, PRJ_GIT_ID, extra_info, PRJ_BUILD_ID); } +void add_common_options(boost::program_options::options_description& opts, + std::string& log_level_str) { + auto log_level_desc = "log level (" + logger::all_level_names() + ")"; + + // clang-format off + opts.add_options() + ("log-level", + boost::program_options::value(&log_level_str) + ->default_value("info"), + log_level_desc.c_str()) + ("help,h", + "output help message and exit"); + // clang-format on +} + } // namespace dwarfs diff --git a/src/dwarfs_main.cpp b/src/dwarfs_main.cpp index c1f87c12..8e67d18d 100644 --- a/src/dwarfs_main.cpp +++ b/src/dwarfs_main.cpp @@ -969,7 +969,7 @@ void usage(std::filesystem::path const& progname) { << " -o readonly show read-only file system\n" << " -o (no_)cache_image (don't) keep image in kernel cache\n" << " -o (no_)cache_files (don't) keep files in kernel cache\n" - << " -o debuglevel=NAME error, warn, info, debug, trace\n" + << " -o debuglevel=NAME " << logger::all_level_names() << "\n" << " -o tidy_strategy=NAME (none)|time|swap\n" << " -o tidy_interval=TIME interval for cache tidying (5m)\n" << " -o tidy_max_age=TIME tidy blocks after this time (10m)\n" diff --git a/src/dwarfsck_main.cpp b/src/dwarfsck_main.cpp index 9cad1a38..1da4212d 100644 --- a/src/dwarfsck_main.cpp +++ b/src/dwarfsck_main.cpp @@ -83,11 +83,8 @@ int dwarfsck_main(int argc, sys_char** argv) { ("export-metadata", po::value(&export_metadata), "export raw metadata as JSON to file") - ("log-level", - po::value(&log_level)->default_value("info"), - "log level (error, warn, info, debug, trace)") - ("help,h", - "output help message and exit"); + ; + add_common_options(opts, log_level); // clang-format on po::positional_options_description pos; diff --git a/src/dwarfsextract_main.cpp b/src/dwarfsextract_main.cpp index ad510b95..3304e561 100644 --- a/src/dwarfsextract_main.cpp +++ b/src/dwarfsextract_main.cpp @@ -83,16 +83,13 @@ int dwarfsextract_main(int argc, sys_char** argv) { ("cache-size,s", po::value(&cache_size_str)->default_value("512m"), "block cache size") - ("log-level,l", - po::value(&log_level)->default_value("warn"), - "log level (error, warn, info, debug, trace)") #if DWARFS_PERFMON_ENABLED ("perfmon", po::value(&perfmon_str), "enable performance monitor") #endif - ("help,h", - "output help message and exit"); + ; + add_common_options(opts, log_level); // clang-format on po::variables_map vm; diff --git a/src/mkdwarfs_main.cpp b/src/mkdwarfs_main.cpp index e4da9926..4faf4f82 100644 --- a/src/mkdwarfs_main.cpp +++ b/src/mkdwarfs_main.cpp @@ -333,11 +333,9 @@ int mkdwarfs_main(int argc, sys_char** argv) { ("compress-level,l", po::value(&level)->default_value(default_level), "compression level (0=fast, 9=best, please see man page for details)") - ("log-level", - po::value(&log_level_str)->default_value("info"), - "log level (error, warn, info, verbose, debug, trace)") - ("help,h", - "output help message and exit") + ; + add_common_options(basic_opts, log_level_str); + basic_opts.add_options() ("long-help,H", "output full help message and exit") ;