Skip to content

Commit

Permalink
[dnf5] Implement new argument "--dump-variables"
Browse files Browse the repository at this point in the history
If dnf5 is run with this argument, variable values are added to standard
output.

The old DNF4 supports this argument only with the `config-manager` plugin.
If the user wants to know the values of the variables with which a certain
command will run, he must first use `config-manager` and then run
the desired command with the same settings (same environment and
configuration files) and hope that nothing changed in between
(e.g. thanks to a plugin).

This implements part of the functionality of the dnf4 config-manager plugin,
but for general use.
  • Loading branch information
jrohel committed Sep 20, 2023
1 parent c6febfe commit 9a92f14
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
6 changes: 6 additions & 0 deletions dnf5/include/dnf5/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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> plugins;
std::unique_ptr<libdnf5::Goal> goal;
Expand Down
26 changes: 26 additions & 0 deletions dnf5/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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


Expand Down Expand Up @@ -810,6 +832,10 @@ int main(int argc, char * argv[]) try {
// Write messages from memory buffer logger to stream logger
dynamic_cast<libdnf5::MemoryBufferLogger &>(*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;
Expand Down

0 comments on commit 9a92f14

Please sign in to comment.