diff --git a/SOURCES/0002-Add-support-for-setting-a-platform-module-ID.patch b/SOURCES/0002-Add-support-for-setting-a-platform-module-ID.patch new file mode 100644 index 0000000..ef0d380 --- /dev/null +++ b/SOURCES/0002-Add-support-for-setting-a-platform-module-ID.patch @@ -0,0 +1,52 @@ +From 4f9a7a0eda7b5d30a5697b07809fc1a93cb976d1 Mon Sep 17 00:00:00 2001 +From: Neal Gompa <ngompa13@gmail.com> +Date: Fri, 20 Nov 2020 06:01:16 -0500 +Subject: [PATCH] Add support for setting a platform module ID + +Now that Micro DNF supports modularity, we need to be able to selectively +override what it detects as the platform module when working with +installroots that have modular content when they differ from the host. + +nsella +Note: the commit 7419ab465a04af525e39005e33ff869647c6bde2 was omitted +--- + dnf/dnf-main.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c +index 6cb8c0e..2ea3d76 100644 +--- a/dnf/dnf-main.c ++++ b/dnf/dnf-main.c +@@ -131,6 +131,20 @@ process_global_option (const gchar *option_name, + } + } + } ++ else if (strcmp (setopt[0], "module_platform_id") == 0) ++ { ++ const char *module_platform_id = setopt[1]; ++ if (module_platform_id[0] != '\0') ++ { ++ dnf_context_set_platform_module (ctx, module_platform_id); ++ } ++ else ++ { ++ local_error = g_error_new (G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, ++ "Empty value in: %s", value); ++ ret = FALSE; ++ } ++ } + else if (strcmp (setopt[0], "cachedir") == 0) + { + cachedir_used = TRUE; +@@ -212,7 +226,7 @@ static const GOptionEntry global_opts[] = { + { "refresh", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_refresh, "Set metadata as expired before running the command", NULL }, + { "releasever", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Override the value of $releasever in config and repo files", "RELEASEVER" }, + { "setopt", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, +- "Override a configuration option (install_weak_deps=0/1, cachedir=<path>, reposdir=<path1>,<path2>,..., tsflags=nodocs/test, varsdir=<path1>,<path2>,...)", "<option>=<value>" }, ++ "Override a configuration option (install_weak_deps=0/1, module_platform_id=<name:stream>, cachedir=<path>, reposdir=<path1>,<path2>,..., tsflags=nodocs/test, varsdir=<path1>,<path2>,...)", "<option>=<value>" }, + { NULL } + }; + +-- +2.26.2 + diff --git a/SOURCES/0003-Rename-update-command-to-upgrade-update-remain-as-compatibility-alias-RhBug-1905471.patch b/SOURCES/0003-Rename-update-command-to-upgrade-update-remain-as-compatibility-alias-RhBug-1905471.patch new file mode 100644 index 0000000..9d6619e --- /dev/null +++ b/SOURCES/0003-Rename-update-command-to-upgrade-update-remain-as-compatibility-alias-RhBug-1905471.patch @@ -0,0 +1,372 @@ +From dfb32883ee6e822289716bba82f4301bdf9d3c59 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel <jrohel@redhat.com> +Date: Mon, 7 Dec 2020 09:23:36 +0100 +Subject: [PATCH 1/3] Command "update" renamed to "upgrade" + +Compatibility with DNF. +DNF uses "upgrade". "update" is deprecated in DNF and is +only supported for compatibility. +--- + dnf/CMakeLists.txt | 8 ++-- + dnf/meson.build | 12 ++--- + .../update/dnf-command-update.gresource.xml | 6 --- + dnf/plugins/update/update.plugin | 9 ---- + .../dnf-command-upgrade.c} | 44 +++++++++---------- + .../upgrade/dnf-command-upgrade.gresource.xml | 6 +++ + .../dnf-command-upgrade.h} | 8 ++-- + dnf/plugins/upgrade/upgrade.plugin | 9 ++++ + 8 files changed, 51 insertions(+), 51 deletions(-) + delete mode 100644 dnf/plugins/update/dnf-command-update.gresource.xml + delete mode 100644 dnf/plugins/update/update.plugin + rename dnf/plugins/{update/dnf-command-update.c => upgrade/dnf-command-upgrade.c} (69%) + create mode 100644 dnf/plugins/upgrade/dnf-command-upgrade.gresource.xml + rename dnf/plugins/{update/dnf-command-update.h => upgrade/dnf-command-upgrade.h} (74%) + create mode 100644 dnf/plugins/upgrade/upgrade.plugin + +diff --git a/dnf/CMakeLists.txt b/dnf/CMakeLists.txt +index 1d640be..7f421f3 100644 +--- a/dnf/CMakeLists.txt ++++ b/dnf/CMakeLists.txt +@@ -15,10 +15,10 @@ glib_compile_resources (DNF_COMMAND_REMOVE plugins/remove/dnf-command-remove.gre + INTERNAL) + list (APPEND DNF_COMMAND_REMOVE "plugins/remove/dnf-command-remove.c") + +-glib_compile_resources (DNF_COMMAND_UPDATE plugins/update/dnf-command-update.gresource.xml +- C_PREFIX dnf_command_update ++glib_compile_resources (DNF_COMMAND_UPGRADE plugins/upgrade/dnf-command-upgrade.gresource.xml ++ C_PREFIX dnf_command_upgrade + INTERNAL) +-list (APPEND DNF_COMMAND_UPDATE "plugins/update/dnf-command-update.c") ++list (APPEND DNF_COMMAND_UPGRADE "plugins/upgrade/dnf-command-upgrade.c") + + glib_compile_resources (DNF_COMMAND_REPOLIST plugins/repolist/dnf-command-repolist.gresource.xml + C_PREFIX dnf_command_repolist +@@ -56,7 +56,7 @@ add_executable (microdnf dnf-main.c ${DNF_SRCS} + ${DNF_COMMAND_INSTALL} + ${DNF_COMMAND_REINSTALL} + ${DNF_COMMAND_REMOVE} +- ${DNF_COMMAND_UPDATE} ++ ${DNF_COMMAND_UPGRADE} + ${DNF_COMMAND_REPOLIST} + ${DNF_COMMAND_REPOQUERY} + ${DNF_COMMAND_CLEAN} +diff --git a/dnf/meson.build b/dnf/meson.build +index b456202..4d4bd9e 100644 +--- a/dnf/meson.build ++++ b/dnf/meson.build +@@ -30,14 +30,14 @@ microdnf_srcs = [ + ), + 'plugins/remove/dnf-command-remove.c', + +- # update ++ # upgrade + gnome.compile_resources( +- 'dnf-update', +- 'plugins/update/dnf-command-update.gresource.xml', +- c_name : 'dnf_command_update', +- source_dir : 'plugins/update', ++ 'dnf-upgrade', ++ 'plugins/upgrade/dnf-command-upgrade.gresource.xml', ++ c_name : 'dnf_command_upgrade', ++ source_dir : 'plugins/upgrade', + ), +- 'plugins/update/dnf-command-update.c', ++ 'plugins/upgrade/dnf-command-upgrade.c', + + # repolist + gnome.compile_resources( +diff --git a/dnf/plugins/update/dnf-command-update.gresource.xml b/dnf/plugins/update/dnf-command-update.gresource.xml +deleted file mode 100644 +index 6168991..0000000 +--- a/dnf/plugins/update/dnf-command-update.gresource.xml ++++ /dev/null +@@ -1,6 +0,0 @@ +-<?xml version="1.0" encoding="UTF-8"?> +-<gresources> +- <gresource prefix="/org/fedoraproject/dnf/plugins/update"> +- <file>update.plugin</file> +- </gresource> +-</gresources> +diff --git a/dnf/plugins/update/update.plugin b/dnf/plugins/update/update.plugin +deleted file mode 100644 +index a61b911..0000000 +--- a/dnf/plugins/update/update.plugin ++++ /dev/null +@@ -1,9 +0,0 @@ +-[Plugin] +-Module = command_update +-Embedded = dnf_command_update_register_types +-Name = update +-Description = Update packages +-Authors = Igor Gnatenko <ignatenko@redhat.com> +-License = GPL-3.0+ +-Copyright = Copyright © 2016 Igor Gnatenko +-X-Command-Syntax = update [PACKAGE…] +diff --git a/dnf/plugins/update/dnf-command-update.c b/dnf/plugins/upgrade/dnf-command-upgrade.c +similarity index 69% +rename from dnf/plugins/update/dnf-command-update.c +rename to dnf/plugins/upgrade/dnf-command-upgrade.c +index 45ff797..5dc1c90 100644 +--- a/dnf/plugins/update/dnf-command-update.c ++++ b/dnf/plugins/upgrade/dnf-command-upgrade.c +@@ -1,4 +1,4 @@ +-/* dnf-command-update.c ++/* dnf-command-upgrade.c + * + * Copyright © 2016-2017 Igor Gnatenko <ignatenko@redhat.com> + * +@@ -16,35 +16,35 @@ + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +-#include "dnf-command-update.h" ++#include "dnf-command-upgrade.h" + #include "dnf-utils.h" + +-struct _DnfCommandUpdate ++struct _DnfCommandUpgrade + { + PeasExtensionBase parent_instance; + }; + +-static void dnf_command_update_iface_init (DnfCommandInterface *iface); ++static void dnf_command_upgrade_iface_init (DnfCommandInterface *iface); + +-G_DEFINE_DYNAMIC_TYPE_EXTENDED (DnfCommandUpdate, +- dnf_command_update, ++G_DEFINE_DYNAMIC_TYPE_EXTENDED (DnfCommandUpgrade, ++ dnf_command_upgrade, + PEAS_TYPE_EXTENSION_BASE, + 0, + G_IMPLEMENT_INTERFACE (DNF_TYPE_COMMAND, +- dnf_command_update_iface_init)) ++ dnf_command_upgrade_iface_init)) + + static void +-dnf_command_update_init (DnfCommandUpdate *self) ++dnf_command_upgrade_init (DnfCommandUpgrade *self) + { + } + + static gboolean +-dnf_command_update_run (DnfCommand *cmd, +- int argc, +- char *argv[], +- GOptionContext *opt_ctx, +- DnfContext *ctx, +- GError **error) ++dnf_command_upgrade_run (DnfCommand *cmd, ++ int argc, ++ char *argv[], ++ GOptionContext *opt_ctx, ++ DnfContext *ctx, ++ GError **error) + { + g_auto(GStrv) pkgs = NULL; + const GOptionEntry opts[] = { +@@ -63,7 +63,7 @@ dnf_command_update_run (DnfCommand *cmd, + } + else + { +- /* Update each package */ ++ /* Upgrade each package */ + for (GStrv pkg = pkgs; *pkg != NULL; pkg++) + { + if (!dnf_context_update (ctx, *pkg, error)) +@@ -89,27 +89,27 @@ dnf_command_update_run (DnfCommand *cmd, + } + + static void +-dnf_command_update_class_init (DnfCommandUpdateClass *klass) ++dnf_command_upgrade_class_init (DnfCommandUpgradeClass *klass) + { + } + + static void +-dnf_command_update_iface_init (DnfCommandInterface *iface) ++dnf_command_upgrade_iface_init (DnfCommandInterface *iface) + { +- iface->run = dnf_command_update_run; ++ iface->run = dnf_command_upgrade_run; + } + + static void +-dnf_command_update_class_finalize (DnfCommandUpdateClass *klass) ++dnf_command_upgrade_class_finalize (DnfCommandUpgradeClass *klass) + { + } + + G_MODULE_EXPORT void +-dnf_command_update_register_types (PeasObjectModule *module) ++dnf_command_upgrade_register_types (PeasObjectModule *module) + { +- dnf_command_update_register_type (G_TYPE_MODULE (module)); ++ dnf_command_upgrade_register_type (G_TYPE_MODULE (module)); + + peas_object_module_register_extension_type (module, + DNF_TYPE_COMMAND, +- DNF_TYPE_COMMAND_UPDATE); ++ DNF_TYPE_COMMAND_UPGRADE); + } +diff --git a/dnf/plugins/upgrade/dnf-command-upgrade.gresource.xml b/dnf/plugins/upgrade/dnf-command-upgrade.gresource.xml +new file mode 100644 +index 0000000..97c1ce4 +--- /dev/null ++++ b/dnf/plugins/upgrade/dnf-command-upgrade.gresource.xml +@@ -0,0 +1,6 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<gresources> ++ <gresource prefix="/org/fedoraproject/dnf/plugins/upgrade"> ++ <file>upgrade.plugin</file> ++ </gresource> ++</gresources> +diff --git a/dnf/plugins/update/dnf-command-update.h b/dnf/plugins/upgrade/dnf-command-upgrade.h +similarity index 74% +rename from dnf/plugins/update/dnf-command-update.h +rename to dnf/plugins/upgrade/dnf-command-upgrade.h +index 58bd228..5c8e976 100644 +--- a/dnf/plugins/update/dnf-command-update.h ++++ b/dnf/plugins/upgrade/dnf-command-upgrade.h +@@ -1,4 +1,4 @@ +-/* dnf-command-update.h ++/* dnf-command-upgrade.h + * + * Copyright © 2016 Igor Gnatenko <ignatenko@redhat.com> + * +@@ -23,9 +23,9 @@ + + G_BEGIN_DECLS + +-#define DNF_TYPE_COMMAND_UPDATE dnf_command_update_get_type () +-G_DECLARE_FINAL_TYPE (DnfCommandUpdate, dnf_command_update, DNF, COMMAND_UPDATE, PeasExtensionBase) ++#define DNF_TYPE_COMMAND_UPGRADE dnf_command_upgrade_get_type () ++G_DECLARE_FINAL_TYPE (DnfCommandUpgrade, dnf_command_upgrade, DNF, COMMAND_UPGRADE, PeasExtensionBase) + +-G_MODULE_EXPORT void dnf_command_update_register_types (PeasObjectModule *module); ++G_MODULE_EXPORT void dnf_command_upgrade_register_types (PeasObjectModule *module); + + G_END_DECLS +diff --git a/dnf/plugins/upgrade/upgrade.plugin b/dnf/plugins/upgrade/upgrade.plugin +new file mode 100644 +index 0000000..1f2bda2 +--- /dev/null ++++ b/dnf/plugins/upgrade/upgrade.plugin +@@ -0,0 +1,9 @@ ++[Plugin] ++Module = command_upgrade ++Embedded = dnf_command_upgrade_register_types ++Name = upgrade ++Description = Upgrade packages ++Authors = Igor Gnatenko <ignatenko@redhat.com> ++License = GPL-2.0+ ++Copyright = Copyright © 2016 Igor Gnatenko ++X-Command-Syntax = upgrade [PACKAGE…] +-- +2.26.2 + + +From 1bdeb23b66b44c4549a19e9c538c30833839156e Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel <jrohel@redhat.com> +Date: Mon, 7 Dec 2020 12:25:48 +0100 +Subject: [PATCH 2/3] Add support for command aliases + +Added support for new custom keys to "*.plugin" file: +X-Alias-Name - command alias name +X-Alias-Description - description of alias + +If both keys are present, then information will be added into help. +--- + dnf/dnf-main.c | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c +index 2ea3d76..0cf634f 100644 +--- a/dnf/dnf-main.c ++++ b/dnf/dnf-main.c +@@ -358,6 +358,8 @@ main (int argc, + g_autoptr(GOptionContext) subcmd_opt_ctx = NULL; + g_autofree gchar *subcmd_opt_param = NULL; + GSList *cmds_with_subcmds = NULL; /* list of commands with subcommands */ ++ /* dictionary of aliases for commands */ ++ g_autoptr(GHashTable) cmds_aliases = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + + setlocale (LC_ALL, ""); + +@@ -397,6 +399,7 @@ main (int argc, + if (peas_engine_provides_extension (engine, info, DNF_TYPE_COMMAND)) + { + g_autofree gchar *command_name = g_strdup (peas_plugin_info_get_name (info)); ++ g_autofree gchar *command_alias_name = g_strdup (peas_plugin_info_get_external_data (info, "Alias-Name")); + + /* Plugins with a '_' character in command name implement subcommands. + E.g. the "command_module_enable" plugin implements the "enable" subcommand of the "module" command. */ +@@ -409,11 +412,21 @@ main (int argc, + break; + } + } ++ ++ /* Add command alias to the dictionary. */ ++ if (command_alias_name) ++ g_hash_table_insert (cmds_aliases, g_strdup (command_alias_name), g_strdup (command_name)); ++ + /* + * At least 2 spaces between the command and its description are needed + * so that help2man formats it correctly. + */ + g_string_append_printf (cmd_summary, "\n %-16s %s", command_name, peas_plugin_info_get_description (info)); ++ ++ /* If command has an alias with a description, add it to the help. */ ++ const gchar *command_alias_description = peas_plugin_info_get_external_data (info, "Alias-Description"); ++ if (command_alias_name && command_alias_description) ++ g_string_append_printf (cmd_summary, "\n %-16s %s", command_alias_name, command_alias_description); + } + } + g_option_context_set_summary (opt_ctx, cmd_summary->str); +@@ -552,15 +565,17 @@ main (int argc, + * Command name (cmd_name) can not contain '_' character. It is reserved for subcomands. */ + if (cmd_name != NULL && strchr(cmd_name, '_') == NULL) + { +- with_subcmds = g_slist_find_custom (cmds_with_subcmds, cmd_name, compare_strings) != NULL; +- g_autofree gchar *mod_name = g_strdup_printf ("command_%s", cmd_name); ++ const gchar *original_cmd_name = g_hash_table_lookup (cmds_aliases, cmd_name); ++ const gchar *search_cmd_name = original_cmd_name ? original_cmd_name : cmd_name; ++ with_subcmds = g_slist_find_custom (cmds_with_subcmds, search_cmd_name, compare_strings) != NULL; ++ g_autofree gchar *mod_name = g_strdup_printf ("command_%s", search_cmd_name); + plug = peas_engine_get_plugin_info (engine, mod_name); + if (plug == NULL && with_subcmds) + { + subcmd_name = get_command (&argc, argv); + if (subcmd_name != NULL) + { +- g_autofree gchar *submod_name = g_strdup_printf ("command_%s_%s", cmd_name, subcmd_name); ++ g_autofree gchar *submod_name = g_strdup_printf ("command_%s_%s", search_cmd_name, subcmd_name); + plug = peas_engine_get_plugin_info (engine, submod_name); + } + } +-- +2.26.2 + + +From 74a918e84a2250c02dcf2190f4951eab2a3e3296 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel <jrohel@redhat.com> +Date: Mon, 7 Dec 2020 12:30:05 +0100 +Subject: [PATCH 3/3] Added alias "update" to "upgrade" command + +"Update" is deprecated, but is required for compatibility. +--- + dnf/plugins/upgrade/upgrade.plugin | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/dnf/plugins/upgrade/upgrade.plugin b/dnf/plugins/upgrade/upgrade.plugin +index 1f2bda2..87dd93e 100644 +--- a/dnf/plugins/upgrade/upgrade.plugin ++++ b/dnf/plugins/upgrade/upgrade.plugin +@@ -7,3 +7,5 @@ Authors = Igor Gnatenko <ignatenko@redhat.com> + License = GPL-2.0+ + Copyright = Copyright © 2016 Igor Gnatenko + X-Command-Syntax = upgrade [PACKAGE…] ++X-Alias-Name = update ++X-Alias-Description = Compatibility alias for the "upgrade" command +-- +2.26.2 + diff --git a/SPECS/microdnf.spec b/SPECS/microdnf.spec index 7a01da1..d8dfed4 100644 --- a/SPECS/microdnf.spec +++ b/SPECS/microdnf.spec @@ -1,14 +1,16 @@ -%global libdnf_version 0.43.1 +%global libdnf_version 0.55.0 Name: microdnf Version: 3.4.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Minimal C implementation of DNF License: GPLv3+ URL: https://github.com/rpm-software-management/microdnf Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Patch0: 0001-Add-module-enable-disable-reset-command.patch +Patch1: 0002-Add-support-for-setting-a-platform-module-ID.patch +Patch2: 0003-Rename-update-command-to-upgrade-update-remain-as-compatibility-alias-RhBug-1905471.patch BuildRequires: gcc BuildRequires: meson >= 0.36.0 @@ -54,6 +56,10 @@ capabilities are intentionally not implemented in Micro DNF. %{_bindir}/%{name} %changelog +* Fri Jan 29 2021 Nicola Sella <nsella@redhat.com> - 3.4.0-3 +- Patch: Add support for setting a platform module ID +- Rename "update" command to "upgrade", "update" remain as compatibility alias + * Fri Jan 15 2021 Nicola Sella <nsella@redhat.com> - 3.4.0-2 - Patch: Add module enable/disable/reset command