Blame SOURCES/0001-Make-sure-that-targeted-updates-dont-do-reinstalls.patch

6c6f93
From 0e29e1188c19609e117478a0df1cb995a2f9e745 Mon Sep 17 00:00:00 2001
6c6f93
From: Michael Schroeder <mls@suse.de>
6c6f93
Date: Fri, 28 Sep 2018 14:48:14 +0200
6c6f93
Subject: [PATCH] Make sure that targeted updates don't do reinstalls
6c6f93
6c6f93
---
6c6f93
 src/solver.c | 16 +++++++++++++---
6c6f93
 1 file changed, 13 insertions(+), 3 deletions(-)
6c6f93
6c6f93
diff --git a/src/solver.c b/src/solver.c
6c6f93
index 6405f4a..a4e0c4b 100644
6c6f93
--- a/src/solver.c
6c6f93
+++ b/src/solver.c
6c6f93
@@ -2957,7 +2957,9 @@ add_update_target(Solver *solv, Id p, Id how)
6c6f93
   Pool *pool = solv->pool;
6c6f93
   Solvable *s = pool->solvables + p;
6c6f93
   Repo *installed = solv->installed;
6c6f93
-  Id pi, pip;
6c6f93
+  Id pi, pip, identicalp;
6c6f93
+  int startcnt, endcnt;
6c6f93
+
6c6f93
   if (!solv->update_targets)
6c6f93
     {
6c6f93
       solv->update_targets = solv_calloc(1, sizeof(Queue));
6c6f93
@@ -2968,6 +2970,8 @@ add_update_target(Solver *solv, Id p, Id how)
6c6f93
       queue_push2(solv->update_targets, p, p);
6c6f93
       return;
6c6f93
     }
6c6f93
+  identicalp = 0;
6c6f93
+  startcnt = solv->update_targets->count;
6c6f93
   FOR_PROVIDES(pi, pip, s->name)
6c6f93
     {
6c6f93
       Solvable *si = pool->solvables + pi;
6c6f93
@@ -2982,9 +2986,9 @@ add_update_target(Solver *solv, Id p, Id how)
6c6f93
       if (how & SOLVER_CLEANDEPS)
6c6f93
 	add_cleandeps_updatepkg(solv, pi);
6c6f93
       queue_push2(solv->update_targets, pi, p);
6c6f93
-      /* check if it's ok to keep the installed package */
6c6f93
+      /* remember an installed package that is identical to p */
6c6f93
       if (s->evr == si->evr && solvable_identical(s, si))
6c6f93
-        queue_push2(solv->update_targets, pi, pi);
6c6f93
+	identicalp = pi;
6c6f93
     }
6c6f93
   if (s->obsoletes)
6c6f93
     {
6c6f93
@@ -3014,6 +3018,12 @@ add_update_target(Solver *solv, Id p, Id how)
6c6f93
 	    }
6c6f93
 	}
6c6f93
     }
6c6f93
+  /* also allow upgrading to an identical installed package */
6c6f93
+  if (identicalp)
6c6f93
+    {
6c6f93
+      for (endcnt = solv->update_targets->count; startcnt < endcnt; startcnt += 2)
6c6f93
+	queue_push2(solv->update_targets, solv->update_targets->elements[startcnt], identicalp);
6c6f93
+    }
6c6f93
 }
6c6f93
 
6c6f93
 static int
6c6f93
--
6c6f93
libgit2 0.26.6
6c6f93