From: Michael Schroeder Date: Thu, 19 Oct 2017 11:28:33 +0000 (+0200) Subject: Fix distupgrade all packages with cleandeps X-Git-Tag: 0.6.30~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53ef5c8dd2691f9179810aa0cc1d2670d01f61eb;p=thirdparty%2Flibsolv.git Fix distupgrade all packages with cleandeps Also add a test for this. --- diff --git a/src/rules.c b/src/rules.c index e0af64f7..b66bf5ff 100644 --- a/src/rules.c +++ b/src/rules.c @@ -1770,7 +1770,7 @@ solver_addtodupmaps(Solver *solv, Id p, Id how, int targeted) if (pool->solvables[pi2].repo != installed) MAPSET(&solv->dupinvolvedmap, pi2); } - if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0) + if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0 && !solv->bestupdatemap_all) { if (!solv->bestupdatemap.size) map_grow(&solv->bestupdatemap, installed->end - installed->start); @@ -1815,7 +1815,7 @@ solver_addtodupmaps(Solver *solv, Id p, Id how, int targeted) if (pool->solvables[pi2].repo != installed) MAPSET(&solv->dupinvolvedmap, pi2); } - if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0) + if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0 && !solv->bestupdatemap_all) { if (!solv->bestupdatemap.size) map_grow(&solv->bestupdatemap, installed->end - installed->start); @@ -1879,9 +1879,13 @@ solver_createdupmaps(Solver *solv) if (installed && pool->solvables[p].repo != installed) MAPSET(&solv->dupmap, p); } - solv->updatemap_all = 1; if (how & SOLVER_FORCEBEST) solv->bestupdatemap_all = 1; + if (how & SOLVER_CLEANDEPS) + { + FOR_REPO_SOLVABLES(installed, p, s) + add_cleandeps_updatepkg(solv, p); + } } else { @@ -1935,6 +1939,8 @@ solver_addduprules(Solver *solv, Map *addedmap) Rule *r; solv->duprules = solv->nrules; + if (solv->dupinvolvedmap_all) + solv->updatemap_all = 1; for (i = 1; i < pool->nsolvables; i++) { if (i == SYSTEMSOLVABLE || !MAPTST(addedmap, i)) @@ -1954,9 +1960,12 @@ solver_addduprules(Solver *solv, Map *addedmap) continue; if (installed && ps->repo == installed) { - if (!solv->updatemap.size) - map_grow(&solv->updatemap, installed->end - installed->start); - MAPSET(&solv->updatemap, p - installed->start); + if (!solv->updatemap_all) + { + if (!solv->updatemap.size) + map_grow(&solv->updatemap, installed->end - installed->start); + MAPSET(&solv->updatemap, p - installed->start); + } if (!MAPTST(&solv->dupmap, p)) { Id ip, ipp; diff --git a/test/testcases/cleandeps/cleandeps_dup.t b/test/testcases/cleandeps/cleandeps_dup.t index 62ebb017..afebcc47 100644 --- a/test/testcases/cleandeps/cleandeps_dup.t +++ b/test/testcases/cleandeps/cleandeps_dup.t @@ -33,3 +33,13 @@ nextjob job distupgrade name A = 1-2 [cleandeps] result transaction,problems,cleandeps #>upgrade A-1-1.noarch@system A-1-2.noarch@test + +# check all packages +nextjob +job distupgrade all packages [cleandeps] +result transaction,problems,cleandeps +#>cleandeps B1-1-1.noarch@system +#>erase B1-1-1.noarch@system +#>install B2-1-1.noarch@test +#>upgrade A-1-1.noarch@system A-2-1.noarch@test +