From: Michael Schroeder Date: Fri, 16 Nov 2012 13:48:38 +0000 (+0100) Subject: do not reinstall identical packages in targeted update X-Git-Tag: BASE-SuSE-Code-12_3-Branch~171 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1275cec995ca89ed6b7871574ff945d9007f79a3;p=thirdparty%2Flibsolv.git do not reinstall identical packages in targeted update --- diff --git a/src/solver.c b/src/solver.c index 77dda726..56c57d2f 100644 --- a/src/solver.c +++ b/src/solver.c @@ -2605,9 +2605,12 @@ add_update_target(Solver *solv, Id p) FOR_PROVIDES(pi, pip, s->name) { Solvable *si = pool->solvables + pi; - if (si->name != s->name || si->repo != installed) + if (si->repo != installed || si->name != s->name) continue; queue_push2(solv->update_targets, pi, p); + /* check if it's ok to keep the installed package */ + if (s->evr == si->evr && solvable_identical(s, si)) + queue_push2(solv->update_targets, pi, pi); } if (s->obsoletes) { @@ -2619,6 +2622,8 @@ add_update_target(Solver *solv, Id p) Solvable *si = pool->solvables + pi; if (si->repo != installed) continue; + if (si->name == s->name) + continue; /* already handled above */ if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, si, obs)) continue; if (pool->obsoleteusescolors && !pool_colormatch(pool, s, si)) @@ -3834,8 +3839,12 @@ pool_isemptyupdatejob(Pool *pool, Id how, Id what) { Solvable *s = pool->solvables + p; FOR_PROVIDES(pi, pip, s->name) - if (pool->solvables[pi].name == s->name && pool->solvables[pi].repo == pool->installed) + { + Solvable *si = pool->solvables + pi; + if (si->repo != pool->installed || si->name != s->name) + continue; return 0; + } if (s->obsoletes) { Id obs, *obsp = s->repo->idarraydata + s->obsoletes;