ngompa / rpms / PackageKit

Forked from rpms/PackageKit 3 years ago
Clone

Blame SOURCES/0001-dnf-Load-all-the-repos-and-vars-directories.patch

1ed004
From 4cef9aa4fb40f39b2b3a0d4a1f3ee87aaef9e10c Mon Sep 17 00:00:00 2001
1ed004
From: Neal Gompa <ngompa13@gmail.com>
1ed004
Date: Tue, 28 Apr 2020 22:00:04 -0400
1ed004
Subject: [PATCH] dnf: Load all the repos and vars directories
1ed004
1ed004
Historically, the backend has internally determined its setup with
1ed004
static values. However, we generally want PackageKit to load all
1ed004
repositories defined in all repository directories that DNF normally
1ed004
searches, since it is not guaranteed to be in /etc/yum.repos.d and
1ed004
DNF supports multiple repository configuration paths.
1ed004
1ed004
We also need the vars to be loaded so that repository definitions
1ed004
that rely on more than the built-in vars will work.
1ed004
1ed004
This bumps our dependency for libdnf to 0.43.1, as we're using APIs
1ed004
introduced in this release. This required bumping the CI environment
1ed004
to Fedora 31.
1ed004
1ed004
(cherry picked from commit ed73aa6317595d2c2f1bda7990cbd64efb133f84)
1ed004
---
1ed004
 backends/dnf/pk-backend-dnf.c | 27 ++++++++++++++++++++++++---
1ed004
 configure.ac                  |  2 +-
1ed004
 tests/ci/Dockerfile-fedora    |  2 +-
1ed004
 3 files changed, 26 insertions(+), 5 deletions(-)
1ed004
1ed004
diff --git a/backends/dnf/pk-backend-dnf.c b/backends/dnf/pk-backend-dnf.c
1ed004
index 503a6eb0a..6ce204c24 100644
1ed004
--- a/backends/dnf/pk-backend-dnf.c
1ed004
+++ b/backends/dnf/pk-backend-dnf.c
1ed004
@@ -137,11 +137,12 @@ pk_backend_context_invalidate_cb (DnfContext *context,
1ed004
 static gboolean
1ed004
 pk_backend_setup_dnf_context (DnfContext *context, GKeyFile *conf, const gchar *release_ver, GError **error)
1ed004
 {
1ed004
+	const gchar * const *repo_dirs;
1ed004
+	const gchar * const *var_dirs;
1ed004
 	gboolean keep_cache;
1ed004
 	g_autofree gchar *cache_dir = NULL;
1ed004
 	g_autofree gchar *destdir = NULL;
1ed004
 	g_autofree gchar *lock_dir = NULL;
1ed004
-	g_autofree gchar *repo_dir = NULL;
1ed004
 	g_autofree gchar *solv_dir = NULL;
1ed004
 
1ed004
 	destdir = g_key_file_get_string (conf, "Daemon", "DestDir", NULL);
1ed004
@@ -152,12 +153,32 @@ pk_backend_setup_dnf_context (DnfContext *context, GKeyFile *conf, const gchar *
1ed004
 	dnf_context_set_cache_dir (context, cache_dir);
1ed004
 	solv_dir = g_build_filename (destdir, "/var/cache/PackageKit", release_ver, "hawkey", NULL);
1ed004
 	dnf_context_set_solv_dir (context, solv_dir);
1ed004
-	repo_dir = g_build_filename (destdir, "/etc/yum.repos.d", NULL);
1ed004
-	dnf_context_set_repo_dir (context, repo_dir);
1ed004
 	lock_dir = g_build_filename (destdir, "/var/run", NULL);
1ed004
 	dnf_context_set_lock_dir (context, lock_dir);
1ed004
 	dnf_context_set_rpm_verbosity (context, "info");
1ed004
 
1ed004
+	/* Add prefix to repo directories */
1ed004
+	repo_dirs = dnf_context_get_repos_dir (context);
1ed004
+	if (repo_dirs != NULL && repo_dirs[0] != NULL) {
1ed004
+		g_auto(GStrv) full_repo_dirs = NULL;
1ed004
+		guint len = g_strv_length ((gchar **)repo_dirs);
1ed004
+		full_repo_dirs = g_new0 (gchar*, len + 1);
1ed004
+		for (guint i = 0; i < len; i++)
1ed004
+			full_repo_dirs[i] = g_build_filename (destdir, repo_dirs[i], NULL);
1ed004
+		dnf_context_set_repos_dir (context, (const gchar * const*)full_repo_dirs);
1ed004
+	}
1ed004
+
1ed004
+	/* Add prefix to var directories */
1ed004
+	var_dirs = dnf_context_get_vars_dir (context);
1ed004
+	if (var_dirs != NULL && var_dirs[0] != NULL) {
1ed004
+		g_auto(GStrv) full_var_dirs = NULL;
1ed004
+		guint len = g_strv_length ((gchar **)var_dirs);
1ed004
+		full_var_dirs = g_new0 (gchar*, len + 1);
1ed004
+		for (guint i = 0; i < len; i++)
1ed004
+			full_var_dirs[i] = g_build_filename (destdir, var_dirs[i], NULL);
1ed004
+		dnf_context_set_vars_dir (context, (const gchar * const*)full_var_dirs);
1ed004
+	}
1ed004
+
1ed004
 	/* use this initial data if repos are not present */
1ed004
 	dnf_context_set_vendor_cache_dir (context, "/usr/share/PackageKit/metadata");
1ed004
 	dnf_context_set_vendor_solv_dir (context, "/usr/share/PackageKit/hawkey");
1ed004
diff --git a/configure.ac b/configure.ac
1ed004
index 3da547561..f0696864a 100644
1ed004
--- a/configure.ac
1ed004
+++ b/configure.ac
1ed004
@@ -424,7 +424,7 @@ AC_SUBST(DBUS_SYS_DIR)
1ed004
 AC_SUBST(DBUS_SERVICES_DIR)
1ed004
 
1ed004
 if test x$enable_dnf = xyes; then
1ed004
-	PKG_CHECK_MODULES(DNF, appstream-glib libdnf >= 0.22.0 rpm)
1ed004
+	PKG_CHECK_MODULES(DNF, appstream-glib libdnf >= 0.43.1 rpm)
1ed004
 	AC_ARG_WITH(dnf-vendor,
1ed004
 			[AS_HELP_STRING([--with-dnf-vendor=<vendor>],[select a vendor configuration (fedora, mageia, openmandriva, rosa; default is fedora)])])
1ed004
 	if test "$with_dnf_vendor" = "fedora" -o "$with_dnf_vendor" = "mageia" -o "$with_dnf_vendor" = "openmandriva" -o "$with_dnf_vendor" = "rosa"; then
1ed004
diff --git a/tests/ci/Dockerfile-fedora b/tests/ci/Dockerfile-fedora
1ed004
index c45a11217..112790e58 100644
1ed004
--- a/tests/ci/Dockerfile-fedora
1ed004
+++ b/tests/ci/Dockerfile-fedora
1ed004
@@ -1,4 +1,4 @@
1ed004
-FROM fedora:29
1ed004
+FROM fedora:31
1ed004
 
1ed004
 RUN dnf -y update
1ed004
 RUN dnf -y install dnf-plugins-core libdnf-devel redhat-rpm-config autoconf-archive gcc make
1ed004
-- 
1ed004
2.26.2
1ed004