diff --git a/dnf5/include/dnf5/context.hpp b/dnf5/include/dnf5/context.hpp index 4dde2f83b..74a1d1ace 100644 --- a/dnf5/include/dnf5/context.hpp +++ b/dnf5/include/dnf5/context.hpp @@ -97,6 +97,11 @@ class Context : public libdnf5::cli::session::Session { bool get_quiet() const { return quiet; } + /// Set to true to print information about variables + void set_dump_variables(bool enable) { this->dump_variables = enable; } + + bool get_dump_variables() const { return dump_variables; } + Plugins & get_plugins() { return *plugins; } libdnf5::Goal * get_goal(bool new_if_not_exist = true); @@ -125,6 +130,7 @@ class Context : public libdnf5::cli::session::Session { const char * comment{nullptr}; bool quiet{false}; + bool dump_variables{false}; std::unique_ptr plugins; std::unique_ptr goal; diff --git a/dnf5/main.cpp b/dnf5/main.cpp index c1165fcc7..235ecc468 100644 --- a/dnf5/main.cpp +++ b/dnf5/main.cpp @@ -507,6 +507,20 @@ void RootCommand::set_argument_parser() { global_options_group->register_argument(debug_solver); } + { + auto dump_variables = parser.add_new_named_arg("dump-variables"); + dump_variables->set_long_name("dump-variables"); + dump_variables->set_description("Print variable values to stdout"); + dump_variables->set_parse_hook_func([&ctx]( + [[maybe_unused]] ArgumentParser::NamedArg * arg, + [[maybe_unused]] const char * option, + [[maybe_unused]] const char * value) { + ctx.set_dump_variables(true); + return true; + }); + global_options_group->register_argument(dump_variables); + } + { auto version = parser.add_new_named_arg("version"); version->set_long_name("version"); @@ -695,6 +709,14 @@ static void print_transaction_size_stats(Context & context) { } } +static void dump_variables(Context & context) { + std::cout << _("======== Variables: ========") << std::endl; + for (const auto & var : context.base.get_vars()->get_variables()) { + const auto & val = var.second; + std::cout << fmt::format("{} = {}", var.first, val.value) << std::endl; + } +} + } // namespace dnf5 @@ -810,6 +832,10 @@ int main(int argc, char * argv[]) try { // Write messages from memory buffer logger to stream logger dynamic_cast(*file_logger).write_to_logger(log_router); + if (context.get_dump_variables()) { + dump_variables(context); + } + auto repo_sack = base.get_repo_sack(); repo_sack->create_repos_from_system_configuration(); any_repos_from_system_configuration = repo_sack->size() > 0;