From 417e7f3dbb3d60904686f1fffe065a99821a33b3 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jul 28 2020 06:47:43 +0000 Subject: import microdnf-3.4.0-1.el8 --- diff --git a/.gitignore b/.gitignore index 8cd3008..57c8351 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/microdnf-3.0.1.tar.gz +SOURCES/microdnf-3.4.0.tar.gz diff --git a/.microdnf.metadata b/.microdnf.metadata index 73985d4..39c4f11 100644 --- a/.microdnf.metadata +++ b/.microdnf.metadata @@ -1 +1 @@ -8894269d9f26cdb20b54a989ce659ff3165f4c5f SOURCES/microdnf-3.0.1.tar.gz +aff8076a31c3d7a7e7b204f03d8a522415a657a1 SOURCES/microdnf-3.4.0.tar.gz diff --git a/SOURCES/0001-Add-support-for-releasever.patch b/SOURCES/0001-Add-support-for-releasever.patch deleted file mode 100644 index d1250cf..0000000 --- a/SOURCES/0001-Add-support-for-releasever.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 95ff60a5f0042ca587d0dad92b8a58f6a56be461 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 10 Apr 2019 16:03:48 +0200 -Subject: [PATCH 1/2] Parse global arguments before context setup - -This is a preparation for support more program arguments. - -Some settings (eg. dnf_context_set_release_ver(), dnf_context_set_repo_dir()) -must be done before dnf_context_setup() function is called. -So global arguments must be parsed before dnf_context_setup() is called. - -On the other hand there are functions which must be called after -context setup. -> List of enabled and disabled repositories is stored -to GSList and used later. ---- - dnf/dnf-main.c | 41 ++++++++++++++++++++++++++++------------- - 1 file changed, 28 insertions(+), 13 deletions(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index ef5a04e..ebf429f 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -30,6 +30,7 @@ static gboolean opt_yes = TRUE; - static gboolean opt_nodocs = FALSE; - static gboolean show_help = FALSE; - static gboolean dl_pkgs_printed = FALSE; -+static GSList *enable_disable_repos = NULL; - - static gboolean - process_global_option (const gchar *option_name, -@@ -40,21 +41,20 @@ process_global_option (const gchar *option_name, - g_autoptr(GError) local_error = NULL; - DnfContext *ctx = DNF_CONTEXT (data); - -- gboolean ret; -+ gboolean ret = TRUE; - if (g_strcmp0 (option_name, "--disablerepo") == 0) - { -- ret = show_help ? TRUE : dnf_context_repo_disable (ctx, value, &local_error); -+ enable_disable_repos = g_slist_append (enable_disable_repos, g_strconcat("d", value, NULL)); - } - else if (g_strcmp0 (option_name, "--enablerepo") == 0) - { -- ret = show_help ? TRUE : dnf_context_repo_enable (ctx, value, &local_error); -+ enable_disable_repos = g_slist_append (enable_disable_repos, g_strconcat("e", value, NULL)); - } - else if (g_strcmp0 (option_name, "--setopt") == 0) - { - if (g_strcmp0 (value, "tsflags=nodocs") == 0) - { - opt_nodocs = TRUE; -- ret = TRUE; - } - else - { -@@ -235,6 +235,11 @@ main (int argc, - - /* - * Parse the global options. -+ */ -+ if (!g_option_context_parse (opt_ctx, &argc, &argv, &error)) -+ goto out; -+ -+ /* - * Initialize dnf context only if help is not requested. - */ - if (!show_help) -@@ -246,14 +251,24 @@ main (int argc, - G_CALLBACK (state_action_changed_cb), - NULL); - -- } -- if (!g_option_context_parse (opt_ctx, &argc, &argv, &error)) -- goto out; -- if (!show_help && opt_nodocs) -- { -- DnfTransaction *txn = dnf_context_get_transaction (ctx); -- dnf_transaction_set_flags (txn, -- dnf_transaction_get_flags (txn) | DNF_TRANSACTION_FLAG_NODOCS); -+ for (GSList * item = enable_disable_repos; item; item = item->next) -+ { -+ gchar * item_data = item->data; -+ int ret; -+ if (item_data[0] == 'd') -+ ret = dnf_context_repo_disable (ctx, item_data+1, &error); -+ else -+ ret = dnf_context_repo_enable (ctx, item_data+1, &error); -+ if (!ret) -+ goto out; -+ } -+ -+ if (opt_nodocs) -+ { -+ DnfTransaction *txn = dnf_context_get_transaction (ctx); -+ dnf_transaction_set_flags (txn, -+ dnf_transaction_get_flags (txn) | DNF_TRANSACTION_FLAG_NODOCS); -+ } - } - - /* -@@ -271,7 +286,7 @@ main (int argc, - if (cmd_name != NULL) --argc; - - g_option_context_set_help_enabled (opt_ctx, TRUE); -- -+ - if (cmd_name == NULL && show_help) - { - g_set_prgname (argv[0]); - -From 594f4ae5fdd60215a5010526406a34536472bb30 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Thu, 11 Apr 2019 09:56:11 +0200 -Subject: [PATCH 2/2] Add support for --releasever (RhBug:1591627) - ---- - dnf/dnf-main.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index ebf429f..2381f20 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -50,6 +50,10 @@ process_global_option (const gchar *option_name, - { - enable_disable_repos = g_slist_append (enable_disable_repos, g_strconcat("e", value, NULL)); - } -+ else if (g_strcmp0 (option_name, "--releasever") == 0) -+ { -+ dnf_context_set_release_ver (ctx, value); -+ } - else if (g_strcmp0 (option_name, "--setopt") == 0) - { - if (g_strcmp0 (value, "tsflags=nodocs") == 0) -@@ -81,6 +85,7 @@ static const GOptionEntry global_opts[] = { - { "disablerepo", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Disable repository by an id", "ID" }, - { "enablerepo", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Enable repository by an id", "ID" }, - { "nodocs", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_nodocs, "Install packages without docs", 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, "Set transaction flag, like tsflags=nodocs", "FLAG" }, - { NULL } - }; diff --git a/SOURCES/0002-Fix-minor-memory-leaks-RhBug1702283.patch b/SOURCES/0002-Fix-minor-memory-leaks-RhBug1702283.patch deleted file mode 100644 index dad7377..0000000 --- a/SOURCES/0002-Fix-minor-memory-leaks-RhBug1702283.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 854119bb3cd790333cd7ed135fdc5c9cdca1d551 Mon Sep 17 00:00:00 2001 -From: Aleš Matěj -Date: Tue, 28 May 2019 15:07:11 +0200 -Subject: [PATCH] Fix minor memory leaks, RhBug:1702283 - ---- - dnf/dnf-utils.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/dnf/dnf-utils.c b/dnf/dnf-utils.c -index ea067ad..14f1667 100644 ---- a/dnf/dnf-utils.c -+++ b/dnf/dnf-utils.c -@@ -48,7 +48,9 @@ dnf_utils_add_transaction_packages (struct libscols_table *tb, - struct libscols_line *ln = scols_table_new_line (tb, parent); - scols_line_set_data (ln, COL_NEVRA, dnf_package_get_nevra (pkg)); - scols_line_set_data (ln, COL_REPO, dnf_package_get_reponame (pkg)); -- scols_line_set_data (ln, COL_SIZE, g_format_size (dnf_package_get_size (pkg))); -+ char *formatted_pkg_size = g_format_size (dnf_package_get_size (pkg)); -+ scols_line_set_data (ln, COL_SIZE, formatted_pkg_size); -+ g_free(formatted_pkg_size); - } - } - -@@ -135,6 +137,7 @@ dnf_utils_print_transaction (DnfContext *ctx) - } - - scols_print_table (tb); -+ scols_unref_symbols (sb); - scols_unref_table (tb); - - g_print ("Transaction Summary:\n"); --- -libgit2 0.27.8 - diff --git a/SOURCES/0003-use-help2man-to-generate-a-man-page.patch b/SOURCES/0003-use-help2man-to-generate-a-man-page.patch deleted file mode 100644 index 4ef2af5..0000000 --- a/SOURCES/0003-use-help2man-to-generate-a-man-page.patch +++ /dev/null @@ -1,192 +0,0 @@ -From a8d57daa4b7a98176a98af29e52c1df1295659cb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= -Date: Wed, 20 Feb 2019 17:18:00 +0100 -Subject: [PATCH 1/4] Reformat the commands listing in --help - -Use just spaces as a separator to be consistent with dnf, at least two -spaces are needed so that help2man formats the commands correctly in the -man page. ---- - dnf/dnf-main.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index 2381f20..fd6406d 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -215,7 +215,11 @@ main (int argc, - if (!peas_engine_load_plugin (engine, info)) - continue; - if (peas_engine_provides_extension (engine, info, DNF_TYPE_COMMAND)) -- g_string_append_printf (cmd_summary, "\n %s - %s", peas_plugin_info_get_name (info), peas_plugin_info_get_description (info)); -+ /* -+ * 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", peas_plugin_info_get_name (info), peas_plugin_info_get_description (info)); - } - g_option_context_set_summary (opt_ctx, cmd_summary->str); - g_string_free (cmd_summary, TRUE); --- -2.24.0 - - -From 838a235bba14d48f65ba760f35f32f9d090043fe Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= -Date: Mon, 17 Jun 2019 12:48:13 +0200 -Subject: [PATCH 2/4] Print only the binary name instead of the full path in - --help - -Removes the directory path from argv[0] for the program name in --help. -This is required for generating the man page with help2man, as the -build directory would appear in the man page. ---- - dnf/dnf-main.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index fd6406d..e35ace0 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -298,7 +298,10 @@ main (int argc, - - if (cmd_name == NULL && show_help) - { -- g_set_prgname (argv[0]); -+ const char *prg_name = strrchr(argv[0], '/') + 1; -+ prg_name = prg_name ? prg_name : argv[0]; -+ -+ g_set_prgname (prg_name); - g_autofree gchar *help = g_option_context_get_help (opt_ctx, TRUE, NULL); - g_print ("%s", help); - goto out; --- -2.24.0 - - -From b00e2adb2520f11442f3a7cf3710e64f5f60dab2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= -Date: Wed, 20 Feb 2019 15:17:33 +0100 -Subject: [PATCH 3/4] Add generating a manpage using help2man to meson.build - -Generates a man page using help2man. Note: - -- The version in meson.build now needs to be updated on every release, - it is used in the man page. - -- help2man is a new build dependency. - -- Packagers should add the generated man page to packages. ---- - dnf/meson.build | 2 +- - meson.build | 21 ++++++++++++++++++++- - 2 files changed, 21 insertions(+), 2 deletions(-) - -diff --git a/dnf/meson.build b/dnf/meson.build -index fe37998..f8f1bf3 100644 ---- a/dnf/meson.build -+++ b/dnf/meson.build -@@ -40,7 +40,7 @@ microdnf_srcs = [ - 'plugins/clean/dnf-command-clean.c', - ] - --executable( -+microdnf = executable( - 'microdnf', - sources : microdnf_srcs, - dependencies : [ -diff --git a/meson.build b/meson.build -index 1f01ae0..a3601aa 100644 ---- a/meson.build -+++ b/meson.build -@@ -1,5 +1,5 @@ - project('microdnf', 'c', -- version : '1', -+ version : '3.0.1', - license : 'GPL-3.0+', - default_options : [ - 'b_asneeded=True', -@@ -44,3 +44,22 @@ add_project_arguments( - ) - - subdir('dnf') -+ -+help2man = find_program('help2man', required: true) -+if help2man.found() -+ help2man_opts = [ -+ '--version-string=' + meson.project_version(), -+ '--no-info', -+ '--section=8', -+ '--name=Micro DNF', -+ ] -+ -+ custom_target('microdnf.8', -+ output: 'microdnf.8', -+ command: [ -+ help2man, help2man_opts, '--output=@OUTPUT@', microdnf -+ ], -+ install: true, -+ install_dir: get_option('mandir') + '/man8', -+ ) -+endif --- -2.24.0 - - -From a1c777a4383ccc5f35396e86e6f3b0a1af92bc7c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= -Date: Mon, 17 Jun 2019 15:10:33 +0200 -Subject: [PATCH 4/4] Add generating a manpage using help2man to CMakeLists.txt - -Generates a man page using help2man. Note: - -- The version in CMakeLists.txt now needs to be updated on every - release, it is used in the man page. - -- help2man is a new build dependency. - -- Packagers should add the generated man page to packages. ---- - CMakeLists.txt | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 435d7e8..dcf8e2f 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -1,5 +1,6 @@ - cmake_minimum_required (VERSION 2.8.5) - project (microdnf C) -+set (PROJECT_VERSION 3.0.1) - - list (APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) - -@@ -25,6 +26,25 @@ set (PKG_DATADIR ${CMAKE_INSTALL_FULL_DATADIR}/dnf) - add_definitions (-DPACKAGE_LIBDIR="${PKG_LIBDIR}") - add_definitions (-DPACKAGE_DATADIR="${PKG_DATADIR}") - -+find_file (HELP2MAN_EXECUTABLE help2man) -+if (NOT HELP2MAN_EXECUTABLE) -+ message (FATAL_ERROR "unable to find help2man") -+endif () -+ -+set (MANPAGE ${CMAKE_CURRENT_BINARY_DIR}/microdnf.8) -+add_custom_command ( -+ DEPENDS microdnf -+ OUTPUT ${MANPAGE} -+ COMMAND ${HELP2MAN_EXECUTABLE} $ -+ --version-string=${PROJECT_VERSION} -+ --no-info -+ --section=8 -+ --name="Micro DNF" -+ --output=${MANPAGE} -+) -+add_custom_target (manpage ALL DEPENDS ${MANPAGE}) -+install (FILES ${MANPAGE} DESTINATION ${CMAKE_INSTALL_FULL_MANDIR}/man8) -+ - include_directories (${GLIB_INCLUDE_DIRS}) - include_directories (${GOBJECT_INCLUDE_DIRS}) - include_directories (${PEAS_INCLUDE_DIRS}) --- -2.24.0 - diff --git a/SOURCES/0004-Fix-microdnf---help-coredump.patch b/SOURCES/0004-Fix-microdnf---help-coredump.patch deleted file mode 100644 index 845eac4..0000000 --- a/SOURCES/0004-Fix-microdnf---help-coredump.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 1701ad8ccccae6f8867a862e074ca30f6583e69f Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Fri, 23 Aug 2019 12:42:42 +0200 -Subject: [PATCH] Fix "microdnf --help" coredump - -There was a bug that causes coredump during comand "microdnf --help". -The bug was in the code that removes the directory path from argv[0] -(in case argv[0] does not contain '/' character). ---- - dnf/dnf-main.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index e35ace0..7c71bd0 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -298,8 +298,8 @@ main (int argc, - - if (cmd_name == NULL && show_help) - { -- const char *prg_name = strrchr(argv[0], '/') + 1; -- prg_name = prg_name ? prg_name : argv[0]; -+ const char *prg_name = strrchr(argv[0], '/'); -+ prg_name = prg_name ? prg_name + 1 : argv[0]; - - g_set_prgname (prg_name); - g_autofree gchar *help = g_option_context_get_help (opt_ctx, TRUE, NULL); --- -2.24.0 - diff --git a/SOURCES/0005-Allow-downgrade-for-all-transactions-microdnf-does-RhBug1725863.patch b/SOURCES/0005-Allow-downgrade-for-all-transactions-microdnf-does-RhBug1725863.patch deleted file mode 100644 index 1c22ec6..0000000 --- a/SOURCES/0005-Allow-downgrade-for-all-transactions-microdnf-does-RhBug1725863.patch +++ /dev/null @@ -1,38 +0,0 @@ -From a22e544907364467c9206fc196a9e43b684465a2 Mon Sep 17 00:00:00 2001 -From: Aleš Matěj -Date: Tue, 27 Aug 2019 10:54:14 +0200 -Subject: [PATCH] Allow downgrade for all transactions microdnf does (RhBug:1725863) - -It can sometimes be necessary to satisfy dependencies or if the user -wants to specifically downgrade some package. ---- - dnf/dnf-main.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index 7c71bd0..693ad7f 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -272,12 +272,16 @@ main (int argc, - goto out; - } - -+ /* allow downgrades for all transaction types */ -+ DnfTransaction *txn = dnf_context_get_transaction (ctx); -+ int flags = dnf_transaction_get_flags (txn) | DNF_TRANSACTION_FLAG_ALLOW_DOWNGRADE; -+ - if (opt_nodocs) - { -- DnfTransaction *txn = dnf_context_get_transaction (ctx); -- dnf_transaction_set_flags (txn, -- dnf_transaction_get_flags (txn) | DNF_TRANSACTION_FLAG_NODOCS); -+ flags |= DNF_TRANSACTION_FLAG_NODOCS; - } -+ -+ dnf_transaction_set_flags (txn, flags); - } - - /* --- -libgit2 0.28.2 - diff --git a/SOURCES/0006-Add-support-of-best-behavior.patch b/SOURCES/0006-Add-support-of-best-behavior.patch deleted file mode 100644 index 6136eac..0000000 --- a/SOURCES/0006-Add-support-of-best-behavior.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 88602163094d654451a9586121aa8ff6fd7c96b0 Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Wed, 23 Oct 2019 13:14:45 +0200 -Subject: [PATCH 1/3] Add option best for transactions (RhBug:1679476) - -It adds option `--best` plus default is handled from libdnf.conf and -dnf.conf - -https://bugzilla.redhat.com/show_bug.cgi?id=1679476 ---- - dnf/dnf-main.c | 7 ++++++- - dnf/plugins/install/dnf-command-install.c | 7 ++++++- - dnf/plugins/update/dnf-command-update.c | 8 ++++++-- - 3 files changed, 18 insertions(+), 4 deletions(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index 693ad7f..0dce9b2 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -28,6 +28,7 @@ - - static gboolean opt_yes = TRUE; - static gboolean opt_nodocs = FALSE; -+static gboolean opt_best = FALSE; - static gboolean show_help = FALSE; - static gboolean dl_pkgs_printed = FALSE; - static GSList *enable_disable_repos = NULL; -@@ -82,6 +83,7 @@ process_global_option (const gchar *option_name, - - static const GOptionEntry global_opts[] = { - { "assumeyes", 'y', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &opt_yes, "Does nothing, we always assume yes", NULL }, -+ { "best", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_best, "Try the best available package versions in transactions", NULL }, - { "disablerepo", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Disable repository by an id", "ID" }, - { "enablerepo", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Enable repository by an id", "ID" }, - { "nodocs", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_nodocs, "Install packages without docs", NULL }, -@@ -283,7 +285,10 @@ main (int argc, - - dnf_transaction_set_flags (txn, flags); - } -- -+ if (!show_help && opt_best) -+ { -+ dnf_context_set_best(opt_best); -+ } - /* - * The first non-option is the command. - * Get it and remove it from arguments. -diff --git a/dnf/plugins/install/dnf-command-install.c b/dnf/plugins/install/dnf-command-install.c -index ea549da..0b2f5e5 100644 ---- a/dnf/plugins/install/dnf-command-install.c -+++ b/dnf/plugins/install/dnf-command-install.c -@@ -73,7 +73,12 @@ dnf_command_install_run (DnfCommand *cmd, - if (!dnf_context_install (ctx, *pkg, error)) - return FALSE; - } -- if (!dnf_goal_depsolve (dnf_context_get_goal (ctx), DNF_INSTALL, error)) -+ DnfGoalActions flags = DNF_INSTALL; -+ if (dnf_context_get_best()) -+ { -+ flags |= DNF_FORCE_BEST; -+ } -+ if (!dnf_goal_depsolve (dnf_context_get_goal (ctx), flags, error)) - return FALSE; - if (!dnf_utils_print_transaction (ctx)) - return TRUE; -diff --git a/dnf/plugins/update/dnf-command-update.c b/dnf/plugins/update/dnf-command-update.c -index 652d902..7bf1334 100644 ---- a/dnf/plugins/update/dnf-command-update.c -+++ b/dnf/plugins/update/dnf-command-update.c -@@ -70,8 +70,12 @@ dnf_command_update_run (DnfCommand *cmd, - return FALSE; - } - } -- -- if (!dnf_goal_depsolve (dnf_context_get_goal (ctx), 0, error)) -+ DnfGoalActions flags = 0; -+ if (dnf_context_get_best()) -+ { -+ flags |= DNF_FORCE_BEST; -+ } -+ if (!dnf_goal_depsolve (dnf_context_get_goal (ctx), flags, error)) - return FALSE; - if (!dnf_utils_print_transaction (ctx)) - return TRUE; --- -2.21.0 - - -From 6a4a490d368fc7982264f8ab898e4bd195576b30 Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Wed, 23 Oct 2019 13:15:17 +0200 -Subject: [PATCH 2/3] Initialized to use tito. - ---- - .tito/packages/.readme | 3 +++ - .tito/tito.props | 5 +++++ - 2 files changed, 8 insertions(+) - create mode 100644 .tito/packages/.readme - create mode 100644 .tito/tito.props - -diff --git a/.tito/packages/.readme b/.tito/packages/.readme -new file mode 100644 -index 0000000..b9411e2 ---- /dev/null -+++ b/.tito/packages/.readme -@@ -0,0 +1,3 @@ -+the .tito/packages directory contains metadata files -+named after their packages. Each file has the latest tagged -+version and the project's relative directory. -diff --git a/.tito/tito.props b/.tito/tito.props -new file mode 100644 -index 0000000..eab3f19 ---- /dev/null -+++ b/.tito/tito.props -@@ -0,0 +1,5 @@ -+[buildconfig] -+builder = tito.builder.Builder -+tagger = tito.tagger.VersionTagger -+changelog_do_not_remove_cherrypick = 0 -+changelog_format = %s (%ae) --- -2.21.0 - - -From 4af6a4c76e7bce0ce06188319b0b4c21a235266c Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Wed, 23 Oct 2019 15:07:55 +0200 -Subject: [PATCH 3/3] Add option --nobest - -It is used to overwrite configuration of best option. It is useful when -best=True is default. ---- - dnf/dnf-main.c | 22 ++++++++++++++++++---- - 1 file changed, 18 insertions(+), 4 deletions(-) - -diff --git a/dnf/dnf-main.c b/dnf/dnf-main.c -index 0dce9b2..4f19489 100644 ---- a/dnf/dnf-main.c -+++ b/dnf/dnf-main.c -@@ -29,6 +29,7 @@ - static gboolean opt_yes = TRUE; - static gboolean opt_nodocs = FALSE; - static gboolean opt_best = FALSE; -+static gboolean opt_nobest = FALSE; - static gboolean show_help = FALSE; - static gboolean dl_pkgs_printed = FALSE; - static GSList *enable_disable_repos = NULL; -@@ -86,6 +87,7 @@ static const GOptionEntry global_opts[] = { - { "best", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_best, "Try the best available package versions in transactions", NULL }, - { "disablerepo", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Disable repository by an id", "ID" }, - { "enablerepo", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_CALLBACK, process_global_option, "Enable repository by an id", "ID" }, -+ { "nobest", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_nobest, "Do not limit the transaction to the best candidates", NULL }, - { "nodocs", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_nodocs, "Install packages without docs", 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, "Set transaction flag, like tsflags=nodocs", "FLAG" }, -@@ -284,11 +286,23 @@ main (int argc, - } - - dnf_transaction_set_flags (txn, flags); -+ if (opt_best && opt_nobest) -+ { -+ error = g_error_new_literal(G_OPTION_ERROR, -+ G_OPTION_ERROR_BAD_VALUE, -+ "Argument --nobest is not allowed with argument --best"); -+ goto out; -+ } -+ if (opt_best) -+ { -+ dnf_context_set_best(TRUE); -+ } -+ else if (opt_nobest) -+ { -+ dnf_context_set_best(FALSE); -+ } - } -- if (!show_help && opt_best) -- { -- dnf_context_set_best(opt_best); -- } -+ - /* - * The first non-option is the command. - * Get it and remove it from arguments. --- -2.21.0 - diff --git a/SOURCES/0007-Add-repolist-command-RhBug1584952.patch b/SOURCES/0007-Add-repolist-command-RhBug1584952.patch deleted file mode 100644 index a74ff5f..0000000 --- a/SOURCES/0007-Add-repolist-command-RhBug1584952.patch +++ /dev/null @@ -1,312 +0,0 @@ -From 83f282853e22fe3146b86b33bdaebb7a22b0a580 Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Thu, 7 Nov 2019 21:34:38 +0100 -Subject: [PATCH] Add repolist command (RhBug:1584952) - -The command lists repositories. - -Command options: - --all show all repositories - --disabled show disabled repositories - --enabled show enabled repositories (default) - -Signed-off-by: Jaroslav Rohel ---- - dnf/CMakeLists.txt | 6 ++++++ - dnf/meson.build | 9 +++++++++ - dnf/plugins/repolist/dnf-command-repolist.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - dnf/plugins/repolist/dnf-command-repolist.gresource.xml | 6 ++++++ - dnf/plugins/repolist/dnf-command-repolist.h | 33 +++++++++++++++++++++++++++++++++ - dnf/plugins/repolist/repolist.plugin | 9 +++++++++ - 6 files changed, 230 insertions(+) - create mode 100644 dnf/plugins/repolist/dnf-command-repolist.c - create mode 100644 dnf/plugins/repolist/dnf-command-repolist.gresource.xml - create mode 100644 dnf/plugins/repolist/dnf-command-repolist.h - create mode 100644 dnf/plugins/repolist/repolist.plugin - -diff --git a/dnf/CMakeLists.txt b/dnf/CMakeLists.txt -index 04d5b17..eb73c11 100644 ---- a/dnf/CMakeLists.txt -+++ b/dnf/CMakeLists.txt -@@ -15,6 +15,11 @@ glib_compile_resources (DNF_COMMAND_UPDATE plugins/update/dnf-command-update.gre - INTERNAL) - list (APPEND DNF_COMMAND_UPDATE "plugins/update/dnf-command-update.c") - -+glib_compile_resources (DNF_COMMAND_REPOLIST plugins/repolist/dnf-command-repolist.gresource.xml -+ C_PREFIX dnf_command_repolist -+ INTERNAL) -+list (APPEND DNF_COMMAND_REPOLIST "plugins/repolist/dnf-command-repolist.c") -+ - glib_compile_resources (DNF_COMMAND_CLEAN plugins/clean/dnf-command-clean.gresource.xml - C_PREFIX dnf_command_clean - INTERNAL) -@@ -25,6 +30,7 @@ add_executable (microdnf dnf-main.c ${DNF_SRCS} - ${DNF_COMMAND_INSTALL} - ${DNF_COMMAND_REMOVE} - ${DNF_COMMAND_UPDATE} -+ ${DNF_COMMAND_REPOLIST} - ${DNF_COMMAND_CLEAN}) - - target_link_libraries (microdnf -diff --git a/dnf/meson.build b/dnf/meson.build -index f8f1bf3..d368180 100644 ---- a/dnf/meson.build -+++ b/dnf/meson.build -@@ -30,6 +30,15 @@ microdnf_srcs = [ - ), - 'plugins/update/dnf-command-update.c', - -+ # repolist -+ gnome.compile_resources( -+ 'dnf-repolist', -+ 'plugins/repolist/dnf-command-repolist.gresource.xml', -+ c_name : 'dnf_command_repolist', -+ source_dir : 'plugins/repolist', -+ ), -+ 'plugins/repolist/dnf-command-repolist.c', -+ - # clean - gnome.compile_resources( - 'dnf-clean', -diff --git a/dnf/plugins/repolist/dnf-command-repolist.c b/dnf/plugins/repolist/dnf-command-repolist.c -new file mode 100644 -index 0000000..f69917e ---- /dev/null -+++ b/dnf/plugins/repolist/dnf-command-repolist.c -@@ -0,0 +1,167 @@ -+/* -+ * Copyright (C) 2019 Red Hat, Inc. -+ * -+ * Licensed under the GNU Lesser General Public License Version 2.1 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include "dnf-command-repolist.h" -+ -+#include -+#include -+ -+struct _DnfCommandRepolist -+{ -+ PeasExtensionBase parent_instance; -+}; -+ -+static void dnf_command_repolist_iface_init (DnfCommandInterface *iface); -+ -+G_DEFINE_DYNAMIC_TYPE_EXTENDED (DnfCommandRepolist, -+ dnf_command_repolist, -+ PEAS_TYPE_EXTENSION_BASE, -+ 0, -+ G_IMPLEMENT_INTERFACE (DNF_TYPE_COMMAND, -+ dnf_command_repolist_iface_init)) -+ -+static void -+dnf_command_repolist_init (DnfCommandRepolist *self) -+{ -+} -+ -+// repository list table columns -+enum { COL_REPO_ID, COL_REPO_NAME, COL_REPO_STATUS }; -+ -+static struct libscols_table * -+create_repolist_table (gboolean with_status) -+{ -+ struct libscols_table *table = scols_new_table (); -+ if (isatty (1)) -+ scols_table_enable_colors (table, 1); -+ scols_table_enable_maxout (table, 1); -+ struct libscols_column *cl = scols_table_new_column (table, "repo id", 0.4, 0); -+ scols_column_set_cmpfunc(cl, scols_cmpstr_cells, NULL); -+ scols_table_new_column (table, "repo name", 0.5, SCOLS_FL_TRUNC); -+ if (with_status) -+ scols_table_new_column (table, "status", 0.1, SCOLS_FL_RIGHT); -+ return table; -+} -+ -+static void -+add_line_into_table (struct libscols_table *table, -+ gboolean with_status, -+ const char *id, -+ const char *descr, -+ gboolean enabled) -+{ -+ struct libscols_line *ln = scols_table_new_line (table, NULL); -+ scols_line_set_data (ln, COL_REPO_ID, id); -+ scols_line_set_data (ln, COL_REPO_NAME, descr); -+ if (with_status) -+ { -+ scols_line_set_data (ln, COL_REPO_STATUS, enabled ? "enabled" : "disabled"); -+ struct libscols_cell * cl = scols_line_get_cell (ln, COL_REPO_STATUS); -+ scols_cell_set_color (cl, enabled ? "green" : "red"); -+ } -+} -+ -+static gboolean -+dnf_command_repolist_run (DnfCommand *cmd, -+ int argc, -+ char *argv[], -+ GOptionContext *opt_ctx, -+ DnfContext *ctx, -+ GError **error) -+{ -+ gboolean opt_all = FALSE; -+ gboolean opt_enabled = FALSE; -+ gboolean opt_disabled = FALSE; -+ g_auto(GStrv) opt_repos = NULL; -+ const GOptionEntry opts[] = { -+ { "all", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_all, "show all repos", NULL }, -+ { "disabled", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_disabled, "show disabled repos", NULL }, -+ { "enabled", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_enabled, "show enabled repos (default)", NULL }, -+ { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &opt_repos, NULL, NULL }, -+ { NULL } -+ }; -+ g_option_context_add_main_entries (opt_ctx, opts, NULL); -+ -+ if (!g_option_context_parse (opt_ctx, &argc, &argv, error)) -+ return FALSE; -+ -+ if (opt_repos && opt_repos[0]) -+ { -+ g_set_error (error, -+ G_OPTION_ERROR, -+ G_OPTION_ERROR_UNKNOWN_OPTION, -+ "Unknown argument %s", opt_repos[0]); -+ return FALSE; -+ } -+ -+ if (!opt_disabled) -+ opt_enabled = TRUE; -+ -+ if (opt_enabled && opt_disabled) -+ opt_all = TRUE; -+ -+ struct libscols_table *table = create_repolist_table (opt_all); -+ -+ GPtrArray *repos = dnf_context_get_repos (ctx); -+ for (guint i = 0; i < repos->len; ++i) -+ { -+ DnfRepo * repo = g_ptr_array_index (repos, i); -+ gboolean enabled = dnf_repo_get_enabled (repo) & DNF_REPO_ENABLED_PACKAGES; -+ if (opt_all || (opt_enabled && enabled) || (opt_disabled && !enabled)) -+ { -+ const gchar * id = dnf_repo_get_id (repo); -+ g_autofree gchar * descr = dnf_repo_get_description (repo); -+ add_line_into_table (table, opt_all, id, descr, enabled); -+ } -+ } -+ -+ struct libscols_column *cl = scols_table_get_column (table, COL_REPO_ID); -+ scols_sort_table (table, cl); -+ scols_print_table (table); -+ scols_unref_table (table); -+ -+ return TRUE; -+} -+ -+static void -+dnf_command_repolist_class_init (DnfCommandRepolistClass *klass) -+{ -+} -+ -+static void -+dnf_command_repolist_iface_init (DnfCommandInterface *iface) -+{ -+ iface->run = dnf_command_repolist_run; -+} -+ -+static void -+dnf_command_repolist_class_finalize (DnfCommandRepolistClass *klass) -+{ -+} -+ -+G_MODULE_EXPORT void -+dnf_command_repolist_register_types (PeasObjectModule *module) -+{ -+ dnf_command_repolist_register_type (G_TYPE_MODULE (module)); -+ -+ peas_object_module_register_extension_type (module, -+ DNF_TYPE_COMMAND, -+ DNF_TYPE_COMMAND_REPOLIST); -+} -diff --git a/dnf/plugins/repolist/dnf-command-repolist.gresource.xml b/dnf/plugins/repolist/dnf-command-repolist.gresource.xml -new file mode 100644 -index 0000000..0d12b8b ---- /dev/null -+++ b/dnf/plugins/repolist/dnf-command-repolist.gresource.xml -@@ -0,0 +1,6 @@ -+ -+ -+ -+ repolist.plugin -+ -+ -diff --git a/dnf/plugins/repolist/dnf-command-repolist.h b/dnf/plugins/repolist/dnf-command-repolist.h -new file mode 100644 -index 0000000..5edaf1c ---- /dev/null -+++ b/dnf/plugins/repolist/dnf-command-repolist.h -@@ -0,0 +1,33 @@ -+/* -+ * Copyright (C) 2019 Red Hat, Inc. -+ * -+ * Licensed under the GNU Lesser General Public License Version 2.1 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#pragma once -+ -+#include "dnf-command.h" -+#include -+ -+G_BEGIN_DECLS -+ -+#define DNF_TYPE_COMMAND_REPOLIST dnf_command_repolist_get_type () -+G_DECLARE_FINAL_TYPE (DnfCommandRepolist, dnf_command_repolist, DNF, COMMAND_REPOLIST, PeasExtensionBase) -+ -+G_MODULE_EXPORT void dnf_command_repolist_register_types (PeasObjectModule *module); -+ -+G_END_DECLS -diff --git a/dnf/plugins/repolist/repolist.plugin b/dnf/plugins/repolist/repolist.plugin -new file mode 100644 -index 0000000..c659a1e ---- /dev/null -+++ b/dnf/plugins/repolist/repolist.plugin -@@ -0,0 +1,9 @@ -+[Plugin] -+Module = command_repolist -+Embedded = dnf_command_repolist_register_types -+Name = repolist -+Description = List repositories -+Authors = Jaroslav Rohel -+License = GPL-3.0+ -+Copyright = Copyright (C) 2019 Red Hat, Inc. -+X-Command-Syntax = repolist [--all] [--disabled] [--enabled] --- -libgit2 0.28.2 - diff --git a/SOURCES/0008-Add-repoquery-command.patch b/SOURCES/0008-Add-repoquery-command.patch deleted file mode 100644 index 1e71e10..0000000 --- a/SOURCES/0008-Add-repoquery-command.patch +++ /dev/null @@ -1,431 +0,0 @@ -From 1ded5d5babfe620488aa8965c7fb922361fa6eaa Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Fri, 8 Nov 2019 13:27:17 +0100 -Subject: [PATCH 1/2] Add repoquery command (RhBug:1769245) - -Searches for selected packages and displays the requested information -about them. - -Command options: - --available display available packages (default) - --installed display installed packages - -Signed-off-by: Jaroslav Rohel ---- - dnf/CMakeLists.txt | 6 + - dnf/meson.build | 9 + - dnf/plugins/repoquery/dnf-command-repoquery.c | 158 ++++++++++++++++++ - .../dnf-command-repoquery.gresource.xml | 6 + - dnf/plugins/repoquery/dnf-command-repoquery.h | 33 ++++ - dnf/plugins/repoquery/repoquery.plugin | 9 + - 6 files changed, 221 insertions(+) - create mode 100644 dnf/plugins/repoquery/dnf-command-repoquery.c - create mode 100644 dnf/plugins/repoquery/dnf-command-repoquery.gresource.xml - create mode 100644 dnf/plugins/repoquery/dnf-command-repoquery.h - create mode 100644 dnf/plugins/repoquery/repoquery.plugin - -diff --git a/dnf/CMakeLists.txt b/dnf/CMakeLists.txt -index eb73c11..2585c06 100644 ---- a/dnf/CMakeLists.txt -+++ b/dnf/CMakeLists.txt -@@ -20,6 +20,11 @@ glib_compile_resources (DNF_COMMAND_REPOLIST plugins/repolist/dnf-command-repoli - INTERNAL) - list (APPEND DNF_COMMAND_REPOLIST "plugins/repolist/dnf-command-repolist.c") - -+glib_compile_resources (DNF_COMMAND_REPOQUERY plugins/repoquery/dnf-command-repoquery.gresource.xml -+ C_PREFIX dnf_command_repoquery -+ INTERNAL) -+list (APPEND DNF_COMMAND_REPOQUERY "plugins/repoquery/dnf-command-repoquery.c") -+ - glib_compile_resources (DNF_COMMAND_CLEAN plugins/clean/dnf-command-clean.gresource.xml - C_PREFIX dnf_command_clean - INTERNAL) -@@ -31,6 +36,7 @@ add_executable (microdnf dnf-main.c ${DNF_SRCS} - ${DNF_COMMAND_REMOVE} - ${DNF_COMMAND_UPDATE} - ${DNF_COMMAND_REPOLIST} -+ ${DNF_COMMAND_REPOQUERY} - ${DNF_COMMAND_CLEAN}) - - target_link_libraries (microdnf -diff --git a/dnf/meson.build b/dnf/meson.build -index d368180..d71a533 100644 ---- a/dnf/meson.build -+++ b/dnf/meson.build -@@ -39,6 +39,15 @@ microdnf_srcs = [ - ), - 'plugins/repolist/dnf-command-repolist.c', - -+ # repoquery -+ gnome.compile_resources( -+ 'dnf-repoquery', -+ 'plugins/repoquery/dnf-command-repoquery.gresource.xml', -+ c_name : 'dnf_command_repoquery', -+ source_dir : 'plugins/repoquery', -+ ), -+ 'plugins/repoquery/dnf-command-repoquery.c', -+ - # clean - gnome.compile_resources( - 'dnf-clean', -diff --git a/dnf/plugins/repoquery/dnf-command-repoquery.c b/dnf/plugins/repoquery/dnf-command-repoquery.c -new file mode 100644 -index 0000000..7db1a8f ---- /dev/null -+++ b/dnf/plugins/repoquery/dnf-command-repoquery.c -@@ -0,0 +1,158 @@ -+/* -+ * Copyright (C) 2019 Red Hat, Inc. -+ * -+ * Licensed under the GNU Lesser General Public License Version 2.1 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include "dnf-command-repoquery.h" -+ -+struct _DnfCommandRepoquery -+{ -+ PeasExtensionBase parent_instance; -+}; -+ -+static void dnf_command_repoquery_iface_init (DnfCommandInterface *iface); -+ -+G_DEFINE_DYNAMIC_TYPE_EXTENDED (DnfCommandRepoquery, -+ dnf_command_repoquery, -+ PEAS_TYPE_EXTENSION_BASE, -+ 0, -+ G_IMPLEMENT_INTERFACE (DNF_TYPE_COMMAND, -+ dnf_command_repoquery_iface_init)) -+ -+static void -+dnf_command_repoquery_init (DnfCommandRepoquery *self) -+{ -+} -+ -+static void -+disable_available_repos (DnfContext *ctx) -+{ -+ GPtrArray *repos = dnf_context_get_repos (ctx); -+ for (guint i = 0; i < repos->len; ++i) -+ { -+ DnfRepo * repo = g_ptr_array_index (repos, i); -+ dnf_repo_set_enabled (repo, DNF_REPO_ENABLED_NONE); -+ } -+} -+ -+static gint -+gptrarr_dnf_package_cmp (gconstpointer a, gconstpointer b) -+{ -+ return dnf_package_cmp(*(DnfPackage**)a, *(DnfPackage**)b); -+} -+ -+static gboolean -+dnf_command_repoquery_run (DnfCommand *cmd, -+ int argc, -+ char *argv[], -+ GOptionContext *opt_ctx, -+ DnfContext *ctx, -+ GError **error) -+{ -+ gboolean opt_available = FALSE; -+ gboolean opt_installed = FALSE; -+ g_auto(GStrv) opt_key = NULL; -+ const GOptionEntry opts[] = { -+ { "available", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_available, "display available packages (default)", NULL }, -+ { "installed", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_installed, "display installed packages", NULL }, -+ { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &opt_key, NULL, NULL }, -+ { NULL } -+ }; -+ g_option_context_add_main_entries (opt_ctx, opts, NULL); -+ -+ if (!g_option_context_parse (opt_ctx, &argc, &argv, error)) -+ return FALSE; -+ -+ // --available is default (compatibility with YUM/DNF) -+ if (!opt_available && !opt_installed) -+ opt_available = TRUE; -+ -+ if (opt_available && opt_installed) -+ opt_available = opt_installed = FALSE; -+ -+ if (opt_installed) -+ disable_available_repos (ctx); -+ -+ DnfState * state = dnf_context_get_state (ctx); -+ DnfContextSetupSackFlags sack_flags = opt_available ? DNF_CONTEXT_SETUP_SACK_FLAG_SKIP_RPMDB -+ : DNF_CONTEXT_SETUP_SACK_FLAG_NONE; -+ dnf_context_setup_sack_with_flags (ctx, state, sack_flags, error); -+ DnfSack *sack = dnf_context_get_sack (ctx); -+ -+ hy_autoquery HyQuery query = hy_query_create (sack); -+ -+ if (opt_key) -+ { -+ hy_query_filter_empty (query); -+ for (char **pkey = opt_key; *pkey; ++pkey) -+ { -+ g_auto(HySubject) subject = hy_subject_create (*pkey); -+ HyNevra out_nevra; -+ hy_autoquery HyQuery key_query = hy_subject_get_best_solution (subject, sack, NULL, -+ &out_nevra, TRUE, TRUE, FALSE, TRUE, TRUE); -+ if (out_nevra) -+ hy_nevra_free(out_nevra); -+ hy_query_union (query, key_query); -+ } -+ } -+ -+ g_autoptr(GPtrArray) pkgs = hy_query_run (query); -+ -+ g_ptr_array_sort (pkgs, gptrarr_dnf_package_cmp); -+ -+ // print packages without duplicated lines -+ const char *prev_line = ""; -+ for (guint i = 0; i < pkgs->len; ++i) -+ { -+ DnfPackage *package = g_ptr_array_index (pkgs, i); -+ const char * line = dnf_package_get_nevra (package); -+ if (strcmp (line, prev_line) != 0) -+ { -+ g_print ("%s\n", line); -+ prev_line = line; -+ } -+ } -+ -+ return TRUE; -+} -+ -+static void -+dnf_command_repoquery_class_init (DnfCommandRepoqueryClass *klass) -+{ -+} -+ -+static void -+dnf_command_repoquery_iface_init (DnfCommandInterface *iface) -+{ -+ iface->run = dnf_command_repoquery_run; -+} -+ -+static void -+dnf_command_repoquery_class_finalize (DnfCommandRepoqueryClass *klass) -+{ -+} -+ -+G_MODULE_EXPORT void -+dnf_command_repoquery_register_types (PeasObjectModule *module) -+{ -+ dnf_command_repoquery_register_type (G_TYPE_MODULE (module)); -+ -+ peas_object_module_register_extension_type (module, -+ DNF_TYPE_COMMAND, -+ DNF_TYPE_COMMAND_REPOQUERY); -+} -diff --git a/dnf/plugins/repoquery/dnf-command-repoquery.gresource.xml b/dnf/plugins/repoquery/dnf-command-repoquery.gresource.xml -new file mode 100644 -index 0000000..6765af2 ---- /dev/null -+++ b/dnf/plugins/repoquery/dnf-command-repoquery.gresource.xml -@@ -0,0 +1,6 @@ -+ -+ -+ -+ repoquery.plugin -+ -+ -diff --git a/dnf/plugins/repoquery/dnf-command-repoquery.h b/dnf/plugins/repoquery/dnf-command-repoquery.h -new file mode 100644 -index 0000000..80fae53 ---- /dev/null -+++ b/dnf/plugins/repoquery/dnf-command-repoquery.h -@@ -0,0 +1,33 @@ -+/* -+ * Copyright (C) 2019 Red Hat, Inc. -+ * -+ * Licensed under the GNU Lesser General Public License Version 2.1 -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library 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 -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#pragma once -+ -+#include "dnf-command.h" -+#include -+ -+G_BEGIN_DECLS -+ -+#define DNF_TYPE_COMMAND_REPOQUERY dnf_command_repoquery_get_type () -+G_DECLARE_FINAL_TYPE (DnfCommandRepoquery, dnf_command_repoquery, DNF, COMMAND_REPOQUERY, PeasExtensionBase) -+ -+G_MODULE_EXPORT void dnf_command_repoquery_register_types (PeasObjectModule *module); -+ -+G_END_DECLS -diff --git a/dnf/plugins/repoquery/repoquery.plugin b/dnf/plugins/repoquery/repoquery.plugin -new file mode 100644 -index 0000000..a107720 ---- /dev/null -+++ b/dnf/plugins/repoquery/repoquery.plugin -@@ -0,0 +1,9 @@ -+[Plugin] -+Module = command_repoquery -+Embedded = dnf_command_repoquery_register_types -+Name = repoquery -+Description = Search for packages matching keyword -+Authors = Jaroslav Rohel -+License = GPL-3.0+ -+Copyright = Copyright (C) 2019 Red Hat, Inc. -+X-Command-Syntax = repoquery [OPTION…] [KEY…] --- -2.21.0 - - -From 99831d883f2a95f3540a844fe8455f896b9b097d Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Sun, 10 Nov 2019 15:32:31 +0100 -Subject: [PATCH 2/2] [repoquery] add "--info" and "--nevra" options - ---info show detailed information about the packages ---nevra use name-epoch:version-release.architecture format - for displaying packages (default) - -Signed-off-by: Jaroslav Rohel ---- - dnf/plugins/repoquery/dnf-command-repoquery.c | 68 +++++++++++++++++-- - 1 file changed, 63 insertions(+), 5 deletions(-) - -diff --git a/dnf/plugins/repoquery/dnf-command-repoquery.c b/dnf/plugins/repoquery/dnf-command-repoquery.c -index 7db1a8f..721c990 100644 ---- a/dnf/plugins/repoquery/dnf-command-repoquery.c -+++ b/dnf/plugins/repoquery/dnf-command-repoquery.c -@@ -20,6 +20,8 @@ - - #include "dnf-command-repoquery.h" - -+#include -+ - struct _DnfCommandRepoquery - { - PeasExtensionBase parent_instance; -@@ -56,6 +58,49 @@ gptrarr_dnf_package_cmp (gconstpointer a, gconstpointer b) - return dnf_package_cmp(*(DnfPackage**)a, *(DnfPackage**)b); - } - -+static void -+package_info_add_line (struct libscols_table *table, const char *key, const char *value) -+{ -+ struct libscols_line *ln = scols_table_new_line (table, NULL); -+ scols_line_set_data (ln, 0, key); -+ scols_line_set_data (ln, 1, value); -+} -+ -+static void -+print_package_info (DnfPackage *package) -+{ -+ struct libscols_table *table = scols_new_table (); -+ scols_table_enable_noheadings (table, 1); -+ scols_table_set_column_separator (table, " : "); -+ scols_table_new_column (table, "key", 5, 0); -+ struct libscols_column *cl = scols_table_new_column (table, "value", 10, SCOLS_FL_WRAP); -+ scols_column_set_safechars (cl, "\n"); -+ scols_column_set_wrapfunc (cl, scols_wrapnl_chunksize, scols_wrapnl_nextchunk, NULL); -+ -+ package_info_add_line (table, "Name", dnf_package_get_name (package)); -+ guint64 epoch = dnf_package_get_epoch (package); -+ if (epoch != 0) -+ { -+ g_autofree gchar *str_epoch = g_strdup_printf ("%ld", epoch); -+ package_info_add_line (table, "Epoch", str_epoch); -+ } -+ package_info_add_line (table, "Version", dnf_package_get_version (package)); -+ package_info_add_line (table, "Release", dnf_package_get_release (package)); -+ package_info_add_line (table, "Architecture", dnf_package_get_arch (package)); -+ g_autofree gchar *size = g_format_size_full (dnf_package_get_size (package), -+ G_FORMAT_SIZE_LONG_FORMAT | G_FORMAT_SIZE_IEC_UNITS); -+ package_info_add_line (table, "Size", size); -+ package_info_add_line (table, "Source", dnf_package_get_sourcerpm (package)); -+ package_info_add_line (table, "Repository", dnf_package_get_reponame (package)); -+ package_info_add_line (table, "Summanry", dnf_package_get_summary (package)); -+ package_info_add_line (table, "URL", dnf_package_get_url (package)); -+ package_info_add_line (table, "License", dnf_package_get_license (package)); -+ package_info_add_line (table, "Description", dnf_package_get_description (package)); -+ -+ scols_print_table (table); -+ scols_unref_table (table); -+} -+ - static gboolean - dnf_command_repoquery_run (DnfCommand *cmd, - int argc, -@@ -65,11 +110,16 @@ dnf_command_repoquery_run (DnfCommand *cmd, - GError **error) - { - gboolean opt_available = FALSE; -+ gboolean opt_info = FALSE; - gboolean opt_installed = FALSE; -+ gboolean opt_nevra = FALSE; - g_auto(GStrv) opt_key = NULL; - const GOptionEntry opts[] = { - { "available", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_available, "display available packages (default)", NULL }, -+ { "info", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_info, "show detailed information about the packages", NULL }, - { "installed", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_installed, "display installed packages", NULL }, -+ { "nevra", '\0', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &opt_nevra, -+ "use name-epoch:version-release.architecture format for displaying packages (default)", NULL }, - { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_STRING_ARRAY, &opt_key, NULL, NULL }, - { NULL } - }; -@@ -115,16 +165,24 @@ dnf_command_repoquery_run (DnfCommand *cmd, - - g_ptr_array_sort (pkgs, gptrarr_dnf_package_cmp); - -- // print packages without duplicated lines - const char *prev_line = ""; - for (guint i = 0; i < pkgs->len; ++i) - { - DnfPackage *package = g_ptr_array_index (pkgs, i); -- const char * line = dnf_package_get_nevra (package); -- if (strcmp (line, prev_line) != 0) -+ if (opt_nevra || !opt_info) -+ { -+ const char * line = dnf_package_get_nevra (package); -+ // print nevras without duplicated lines -+ if (opt_info || strcmp (line, prev_line) != 0) -+ { -+ g_print ("%s\n", line); -+ prev_line = line; -+ } -+ } -+ if (opt_info) - { -- g_print ("%s\n", line); -- prev_line = line; -+ print_package_info (package); -+ g_print ("\n"); - } - } - --- -2.21.0 - diff --git a/SPECS/microdnf.spec b/SPECS/microdnf.spec index 75f8e56..fde7f12 100644 --- a/SPECS/microdnf.spec +++ b/SPECS/microdnf.spec @@ -1,21 +1,13 @@ -%global libdnf_version 0.38.0 +%global libdnf_version 0.43.1 Name: microdnf -Version: 3.0.1 -Release: 7%{?dist} -Summary: Micro DNF +Version: 3.4.0 +Release: 1%{?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 -Patch1: 0001-Add-support-for-releasever.patch -Patch2: 0002-Fix-minor-memory-leaks-RhBug1702283.patch -Patch3: 0003-use-help2man-to-generate-a-man-page.patch -Patch4: 0004-Fix-microdnf---help-coredump.patch -Patch5: 0005-Allow-downgrade-for-all-transactions-microdnf-does-RhBug1725863.patch -Patch6: 0006-Add-support-of-best-behavior.patch -Patch7: 0007-Add-repolist-command-RhBug1584952.patch -Patch8: 0008-Add-repoquery-command.patch BuildRequires: gcc BuildRequires: meson >= 0.36.0 @@ -29,7 +21,17 @@ BuildRequires: help2man Requires: libdnf%{?_isa} >= %{libdnf_version} %description -%{summary}. +Micro DNF is a very minimal C implementation of DNF's install, upgrade, +remove, repolist, and clean commands, designed to be used for doing simple +packaging actions in containers when you don't need full-blown DNF and +you want the tiniest useful containers possible. + +That is, you don't want any interpreter stack and you want the most +minimal environment possible so you can build up to exactly what you need. + +This is not a substitute for DNF for real systems, and many of DNF's +capabilities are intentionally not implemented in Micro DNF. + %prep %autosetup -p1 @@ -47,10 +49,30 @@ Requires: libdnf%{?_isa} >= %{libdnf_version} %files %license COPYING %doc README.md +%{_mandir}/man8/microdnf.8* %{_bindir}/%{name} -%{_mandir}/man8/%{name}.8* %changelog +* Mon Apr 06 2020 Ales Matej - 3.4.0-1 +- Update to 3.4.0 +- Fix: do not download metadata in remove command +- Add reinstall command +- Add "--setopt=tsflags=test" support +- Add "--setopt=reposdir=" and "--setopt=varsdir=,,..." support +- Add "--config=" support +- Add "--disableplugin", "--enableplugin" support (RhBug:1781126) +- Add "--noplugins" support +- Add "--setopt=cachedir=" support +- Add "--installroot=" support +- Add "--refresh" support +- Support "install_weak_deps" conf option and "--setopt=install_weak_deps=0/1" +- Respect reposdir from conf file +- Respect "metadata_expire" conf file opton (RhBug:1771147) +- [repolist] Print padding spaces only if output is terminal + +* Mon Jan 13 2020 Ales Matej - 3.0.1-8 +- Fix: Don't print lines with (null) in transaction report (RhBug:1691353) + * Tue Dec 17 2019 Pavla Kratochvilova - 3.0.1-7 - Add dependency on libdnf