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 supported this argument only with the `config-manager` plugin.
If the user wanted to know the values of the variables with which a certain
command will run, he had to 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).
  • Loading branch information
jrohel committed Sep 7, 2023
1 parent 6d7cb37 commit 506956b
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 dump_variables) { this->dump_variables = dump_variables; }

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 @@ -808,6 +830,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 506956b

Please sign in to comment.