From cd85f5655ab89491043ec920c438f867c364ce4a Mon Sep 17 00:00:00 2001 From: Jaroslav Mracek Date: Fri, 21 Jun 2024 10:47:45 +0200 Subject: [PATCH] Add debuginfo-install command --- .../debuginfo-install/debuginfo-install.cpp | 79 +++++++++++++++++++ .../debuginfo-install/debuginfo-install.hpp | 47 +++++++++++ dnf5/main.cpp | 2 + 3 files changed, 128 insertions(+) create mode 100644 dnf5/commands/debuginfo-install/debuginfo-install.cpp create mode 100644 dnf5/commands/debuginfo-install/debuginfo-install.hpp diff --git a/dnf5/commands/debuginfo-install/debuginfo-install.cpp b/dnf5/commands/debuginfo-install/debuginfo-install.cpp new file mode 100644 index 000000000..605792d71 --- /dev/null +++ b/dnf5/commands/debuginfo-install/debuginfo-install.cpp @@ -0,0 +1,79 @@ +/* +Copyright Contributors to the libdnf project. + +This file is part of libdnf: https://github.com/rpm-software-management/libdnf/ + +Libdnf is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +Libdnf is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with libdnf. If not, see . +*/ + +#include "debuginfo-install.hpp" + +#include + +#include + + +namespace dnf5 { + + +using namespace libdnf5::cli; + + +void DebuginfoInstallCommand::set_parent_command() { + auto * arg_parser_parent_cmd = get_session().get_argument_parser().get_root_command(); + auto * arg_parser_this_cmd = get_argument_parser_command(); + arg_parser_parent_cmd->register_command(arg_parser_this_cmd); + arg_parser_parent_cmd->get_group("software_management_commands").register_argument(arg_parser_this_cmd); +} + +void DebuginfoInstallCommand::set_argument_parser() { + auto & ctx = get_context(); + auto & parser = ctx.get_argument_parser(); + auto & cmd = *get_argument_parser_command(); + + get_argument_parser_command()->set_description("Install debuginfo packages."); + + allow_erasing = std::make_unique(*this); + auto skip_broken = std::make_unique(*this); + auto skip_unavailable = std::make_unique(*this); + + patterns_to_debuginfo_install_options = parser.add_new_values(); + auto patterns_arg = parser.add_new_positional_arg( + "patterns", + ArgumentParser::PositionalArg::UNLIMITED, + parser.add_init_value(std::unique_ptr(new libdnf5::OptionString(nullptr))), + patterns_to_debuginfo_install_options); + patterns_arg->set_description("Patterns"); + cmd.register_positional_arg(patterns_arg); +} + +void DebuginfoInstallCommand::configure() { + auto & context = get_context(); + context.set_load_system_repo(true); + context.set_load_available_repos(Context::LoadAvailableRepos::ENABLED); + context.get_base().get_repo_sack()->enable_debug_repos(); +} + +void DebuginfoInstallCommand::run() { + auto goal = get_context().get_goal(); + auto settings = libdnf5::GoalJobSettings(); + goal->set_allow_erasing(allow_erasing->get_value()); + + for (const auto & pattern : *patterns_to_debuginfo_install_options) { + auto option = dynamic_cast(pattern.get()); + goal->add_debug_install(option->get_value(), settings); + } +} + +} // namespace dnf5 diff --git a/dnf5/commands/debuginfo-install/debuginfo-install.hpp b/dnf5/commands/debuginfo-install/debuginfo-install.hpp new file mode 100644 index 000000000..1294c78a8 --- /dev/null +++ b/dnf5/commands/debuginfo-install/debuginfo-install.hpp @@ -0,0 +1,47 @@ +/* +Copyright Contributors to the libdnf project. + +This file is part of libdnf: https://github.com/rpm-software-management/libdnf/ + +Libdnf is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +Libdnf is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with libdnf. If not, see . +*/ + + +#ifndef DNF5_COMMANDS_DEBUGINFO_INSTALL_DEBUGINFO_INSTALL_HPP +#define DNF5_COMMANDS_DEBUGINFO_INSTALL_DEBUGINFO_INSTALL_HPP + +#include +#include + +namespace dnf5 { + + +class DebuginfoInstallCommand : public Command { +public: + explicit DebuginfoInstallCommand(Context & context) : Command(context, "debuginfo-install") {} + void set_parent_command() override; + void set_argument_parser() override; + void configure() override; + void run() override; + + std::vector> * patterns_to_debuginfo_install_options{nullptr}; + + std::unique_ptr allow_erasing; +}; + + +} // namespace dnf5 + + +#endif // DNF5_COMMANDS_DEBUGINFO_INSTALL_DEBUGINFO_INSTALL_HPP diff --git a/dnf5/main.cpp b/dnf5/main.cpp index 8c26b13a9..c51ed42a9 100644 --- a/dnf5/main.cpp +++ b/dnf5/main.cpp @@ -23,6 +23,7 @@ along with libdnf. If not, see . #include "commands/check-upgrade/check-upgrade.hpp" #include "commands/check/check.hpp" #include "commands/clean/clean.hpp" +#include "commands/debuginfo-install/debuginfo-install.hpp" #include "commands/distro-sync/distro-sync.hpp" #include "commands/downgrade/downgrade.hpp" #include "commands/download/download.hpp" @@ -671,6 +672,7 @@ static void add_commands(Context & context) { context.add_and_initialize_command(std::make_unique(context)); context.add_and_initialize_command(std::make_unique(context)); context.add_and_initialize_command(std::make_unique(context)); + context.add_and_initialize_command(std::make_unique(context)); context.add_and_initialize_command(std::make_unique(context)); context.add_and_initialize_command(std::make_unique(context)); context.add_and_initialize_command(std::make_unique(context));