ngompa / rpms / PackageKit

Forked from rpms/PackageKit 3 years ago
Clone
Blob Blame History Raw
From 4cef9aa4fb40f39b2b3a0d4a1f3ee87aaef9e10c Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa13@gmail.com>
Date: Tue, 28 Apr 2020 22:00:04 -0400
Subject: [PATCH] dnf: Load all the repos and vars directories

Historically, the backend has internally determined its setup with
static values. However, we generally want PackageKit to load all
repositories defined in all repository directories that DNF normally
searches, since it is not guaranteed to be in /etc/yum.repos.d and
DNF supports multiple repository configuration paths.

We also need the vars to be loaded so that repository definitions
that rely on more than the built-in vars will work.

This bumps our dependency for libdnf to 0.43.1, as we're using APIs
introduced in this release. This required bumping the CI environment
to Fedora 31.

(cherry picked from commit ed73aa6317595d2c2f1bda7990cbd64efb133f84)
---
 backends/dnf/pk-backend-dnf.c | 27 ++++++++++++++++++++++++---
 configure.ac                  |  2 +-
 tests/ci/Dockerfile-fedora    |  2 +-
 3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/backends/dnf/pk-backend-dnf.c b/backends/dnf/pk-backend-dnf.c
index 503a6eb0a..6ce204c24 100644
--- a/backends/dnf/pk-backend-dnf.c
+++ b/backends/dnf/pk-backend-dnf.c
@@ -137,11 +137,12 @@ pk_backend_context_invalidate_cb (DnfContext *context,
 static gboolean
 pk_backend_setup_dnf_context (DnfContext *context, GKeyFile *conf, const gchar *release_ver, GError **error)
 {
+	const gchar * const *repo_dirs;
+	const gchar * const *var_dirs;
 	gboolean keep_cache;
 	g_autofree gchar *cache_dir = NULL;
 	g_autofree gchar *destdir = NULL;
 	g_autofree gchar *lock_dir = NULL;
-	g_autofree gchar *repo_dir = NULL;
 	g_autofree gchar *solv_dir = NULL;
 
 	destdir = g_key_file_get_string (conf, "Daemon", "DestDir", NULL);
@@ -152,12 +153,32 @@ pk_backend_setup_dnf_context (DnfContext *context, GKeyFile *conf, const gchar *
 	dnf_context_set_cache_dir (context, cache_dir);
 	solv_dir = g_build_filename (destdir, "/var/cache/PackageKit", release_ver, "hawkey", NULL);
 	dnf_context_set_solv_dir (context, solv_dir);
-	repo_dir = g_build_filename (destdir, "/etc/yum.repos.d", NULL);
-	dnf_context_set_repo_dir (context, repo_dir);
 	lock_dir = g_build_filename (destdir, "/var/run", NULL);
 	dnf_context_set_lock_dir (context, lock_dir);
 	dnf_context_set_rpm_verbosity (context, "info");
 
+	/* Add prefix to repo directories */
+	repo_dirs = dnf_context_get_repos_dir (context);
+	if (repo_dirs != NULL && repo_dirs[0] != NULL) {
+		g_auto(GStrv) full_repo_dirs = NULL;
+		guint len = g_strv_length ((gchar **)repo_dirs);
+		full_repo_dirs = g_new0 (gchar*, len + 1);
+		for (guint i = 0; i < len; i++)
+			full_repo_dirs[i] = g_build_filename (destdir, repo_dirs[i], NULL);
+		dnf_context_set_repos_dir (context, (const gchar * const*)full_repo_dirs);
+	}
+
+	/* Add prefix to var directories */
+	var_dirs = dnf_context_get_vars_dir (context);
+	if (var_dirs != NULL && var_dirs[0] != NULL) {
+		g_auto(GStrv) full_var_dirs = NULL;
+		guint len = g_strv_length ((gchar **)var_dirs);
+		full_var_dirs = g_new0 (gchar*, len + 1);
+		for (guint i = 0; i < len; i++)
+			full_var_dirs[i] = g_build_filename (destdir, var_dirs[i], NULL);
+		dnf_context_set_vars_dir (context, (const gchar * const*)full_var_dirs);
+	}
+
 	/* use this initial data if repos are not present */
 	dnf_context_set_vendor_cache_dir (context, "/usr/share/PackageKit/metadata");
 	dnf_context_set_vendor_solv_dir (context, "/usr/share/PackageKit/hawkey");
diff --git a/configure.ac b/configure.ac
index 3da547561..f0696864a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -424,7 +424,7 @@ AC_SUBST(DBUS_SYS_DIR)
 AC_SUBST(DBUS_SERVICES_DIR)
 
 if test x$enable_dnf = xyes; then
-	PKG_CHECK_MODULES(DNF, appstream-glib libdnf >= 0.22.0 rpm)
+	PKG_CHECK_MODULES(DNF, appstream-glib libdnf >= 0.43.1 rpm)
 	AC_ARG_WITH(dnf-vendor,
 			[AS_HELP_STRING([--with-dnf-vendor=<vendor>],[select a vendor configuration (fedora, mageia, openmandriva, rosa; default is fedora)])])
 	if test "$with_dnf_vendor" = "fedora" -o "$with_dnf_vendor" = "mageia" -o "$with_dnf_vendor" = "openmandriva" -o "$with_dnf_vendor" = "rosa"; then
diff --git a/tests/ci/Dockerfile-fedora b/tests/ci/Dockerfile-fedora
index c45a11217..112790e58 100644
--- a/tests/ci/Dockerfile-fedora
+++ b/tests/ci/Dockerfile-fedora
@@ -1,4 +1,4 @@
-FROM fedora:29
+FROM fedora:31
 
 RUN dnf -y update
 RUN dnf -y install dnf-plugins-core libdnf-devel redhat-rpm-config autoconf-archive gcc make
-- 
2.26.2