|
|
c3ab34 |
From a144c29831a39ed303d6ea8d2ae91e1c36d64c84 Mon Sep 17 00:00:00 2001
|
|
|
c3ab34 |
Message-Id: <a144c29831a39ed303d6ea8d2ae91e1c36d64c84.1559799452.git.pmatilai@redhat.com>
|
|
|
c3ab34 |
From: Panu Matilainen <pmatilai@redhat.com>
|
|
|
c3ab34 |
Date: Wed, 15 May 2019 13:51:19 +0300
|
|
|
c3ab34 |
Subject: [PATCH] Fix packages getting erased on failed update with dnf
|
|
|
c3ab34 |
(RhBug:1620275)
|
|
|
c3ab34 |
|
|
|
c3ab34 |
When adding update elements, we set the erase element to depend on the
|
|
|
c3ab34 |
install element, but if an API user adds the same erasure manually
|
|
|
c3ab34 |
after adding the update, we know its a duplicate erasure and filter
|
|
|
c3ab34 |
it out, BUT we zero out the dependent element in the process. And
|
|
|
c3ab34 |
if installing the update now fails, we end up removing the whole package
|
|
|
c3ab34 |
due to that missing dependent element.
|
|
|
c3ab34 |
|
|
|
c3ab34 |
This never happens with rpm itself so we can't easily test it, but is
|
|
|
c3ab34 |
100% reproducable with dnf (at least dnf 3-4). Apparently it adds all
|
|
|
c3ab34 |
erasures by itself (which is kind of understandable I guess, perhaps
|
|
|
c3ab34 |
we should better allow this in the API)
|
|
|
c3ab34 |
---
|
|
|
c3ab34 |
lib/depends.c | 3 ++-
|
|
|
c3ab34 |
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
c3ab34 |
|
|
|
c3ab34 |
diff --git a/lib/depends.c b/lib/depends.c
|
|
|
c3ab34 |
index 6e9866eae..f8a6084ab 100644
|
|
|
c3ab34 |
--- a/lib/depends.c
|
|
|
c3ab34 |
+++ b/lib/depends.c
|
|
|
c3ab34 |
@@ -121,7 +121,8 @@ static int removePackage(rpmts ts, Header h, rpmte depends)
|
|
|
c3ab34 |
|
|
|
c3ab34 |
/* Filter out duplicate erasures. */
|
|
|
c3ab34 |
if (packageHashGetEntry(tsmem->removedPackages, dboffset, &pp, NULL, NULL)) {
|
|
|
c3ab34 |
- rpmteSetDependsOn(pp[0], depends);
|
|
|
c3ab34 |
+ if (depends)
|
|
|
c3ab34 |
+ rpmteSetDependsOn(pp[0], depends);
|
|
|
c3ab34 |
return 0;
|
|
|
c3ab34 |
}
|
|
|
c3ab34 |
|
|
|
c3ab34 |
--
|
|
|
c3ab34 |
2.21.0
|
|
|
c3ab34 |
|