Hello community,

here is the log from the commit of package libdnf for openSUSE:Leap:15.2 
checked in at 2020-03-29 14:55:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/libdnf (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.libdnf.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libdnf"

Sun Mar 29 14:55:22 2020 rev:29 rq:787281 version:0.45.0

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/libdnf/libdnf.changes  2020-03-01 
13:34:41.267459216 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.libdnf.new.3160/libdnf.changes        
2020-03-29 14:55:23.155143551 +0200
@@ -1,0 +2,6 @@
+Sun Mar 22 14:47:59 UTC 2020 - Neal Gompa <[email protected]>
+
+- Add patch to support monitoring non-bdb rpmdb variants
+  + Patch: libdnf-0.45.0-handle-all-rpmdb-variants.patch
+
+-------------------------------------------------------------------

New:
----
  libdnf-0.45.0-handle-all-rpmdb-variants.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libdnf.spec ++++++
--- /var/tmp/diff_new_pack.BuWWN5/_old  2020-03-29 14:55:23.531143844 +0200
+++ /var/tmp/diff_new_pack.BuWWN5/_new  2020-03-29 14:55:23.535143847 +0200
@@ -45,6 +45,8 @@
 Patch1000:      libdnf-0.39.1-with-static-libsolvext.patch
 # PATCH-FIX-OPENSUSE: Switch default reposdir to /etc/dnf/repos.d
 Patch1001:      libdnf-0.39.1-Switch-default-reposdir-to-etc-dnf-repos.d.patch
+# PATCH-FIX-OPENSUSE: Handle monitoring non-bdb rpmdb variants
+Patch1002:      libdnf-0.45.0-handle-all-rpmdb-variants.patch
 
 BuildRequires:  cmake
 BuildRequires:  gcc

++++++ libdnf-0.45.0-handle-all-rpmdb-variants.patch ++++++
>From 9584c58876fb571f1d8817e51c4c275f033b3417 Mon Sep 17 00:00:00 2001
From: Neal Gompa <[email protected]>
Date: Wed, 18 Mar 2020 08:02:48 -0400
Subject: [PATCH] context, sack: Support all rpmdb path variants

We rely on identifying whether the rpmdb path has changed to
determine whether we need to re-cache data from there. Now
that RPM has multiple rpmdb options and there are two common
paths in use by RPM-based systems, we need to handle all of
these.
---
 libdnf/dnf-context.cpp | 23 ++++++++++++++++++++++-
 libdnf/dnf-sack.cpp    |  9 ++++++++-
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp
index e69213ba..17c1d496 100644
--- a/libdnf/dnf-context.cpp
+++ b/libdnf/dnf-context.cpp
@@ -2094,6 +2094,15 @@ dnf_context_setup(DnfContext *context,
     g_autoptr(GString) buf = NULL;
     g_autofree char *rpmdb_path = NULL;
     g_autoptr(GFile) file_rpmdb = NULL;
+    const gchar *rpmdb_path_variants[] = { "var/lib/rpm/rpmdb.sqlite",
+                                           "usr/lib/sysimage/rpm/rpmdb.sqlite",
+                                           "var/lib/rpm/Packages.db",
+                                           "usr/lib/sysimage/rpm/Packages.db",
+                                           "var/lib/rpm/Packages",
+                                           "usr/lib/sysimage/rpm/Packages",
+                                           "var/lib/rpm/data.mdb",
+                                           "usr/lib/sysimage/rpm/data.mdb",
+                                           NULL };
 
     if (libdnf::getGlobalMainConfig().plugins().getValue() && 
!pluginsDir.empty()) {
         priv->plugins->loadPlugins(pluginsDir);
@@ -2177,9 +2186,21 @@ dnf_context_setup(DnfContext *context,
         !dnf_context_set_os_release(context, error))
         return FALSE;
 
+    /* identify correct rpmdb file */
+    for (i = 0; rpmdb_path_variants[i] != NULL; i++) {
+        rpmdb_path = g_build_filename(priv->install_root, 
rpmdb_path_variants[i], NULL);
+        if (g_file_test(rpmdb_path, G_FILE_TEST_EXISTS))
+            break;
+        rpmdb_path = NULL;
+    }
+
+    /* if we can't identify an rpmdb path for any reason, fallback to legacy 
value */
+    if (rpmdb_path == NULL) {
+        rpmdb_path = g_build_filename(priv->install_root, 
"var/lib/rpm/Packages", NULL);
+    }
+
     /* setup a file monitor on the rpmdb, if we're operating on the native / */
     if (g_strcmp0(priv->install_root, "/") == 0) {
-        rpmdb_path = g_build_filename(priv->install_root, 
"var/lib/rpm/Packages", NULL);
         file_rpmdb = g_file_new_for_path(rpmdb_path);
         priv->monitor_rpmdb = g_file_monitor_file(file_rpmdb,
                                G_FILE_MONITOR_NONE,
diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp
index b281f590..0ecf4fc9 100644
--- a/libdnf/dnf-sack.cpp
+++ b/libdnf/dnf-sack.cpp
@@ -226,7 +226,14 @@ dnf_sack_new(void)
 static int
 current_rpmdb_checksum(Pool *pool, unsigned char csout[CHKSUM_BYTES])
 {
-    const char *rpmdb_prefix_paths[] = { "/var/lib/rpm/Packages",
+    const char *rpmdb_prefix_paths[] = { "/var/lib/rpm/rpmdb.sqlite",
+                                         "/usr/lib/sysimage/rpm/rpmdb.sqlite",
+                                         "/var/lib/rpm/Packages.db",
+                                         "/usr/lib/sysimage/rpm/Packages.db",
+                                         "/var/lib/rpm/Packages",
+                                         "/usr/lib/sysimage/rpm/Packages",
+                                         "/var/lib/rpm/data.mdb",
+                                         "/usr/lib/sysimage/rpm/data.mdb",
                                          "/usr/share/rpm/Packages" };
     unsigned int i;
     const char *fn;
-- 
2.25.0


Reply via email to