From: Michael Schroeder Date: Wed, 14 Apr 2010 10:23:07 +0000 (+0200) Subject: - also look at directly addressed userinstalled solvables X-Git-Tag: BASE-SuSE-Code-12_1-Branch~158^2~33^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac63d9ffee1eefc8ce96210f6d79b5ed7b1e15aa;p=thirdparty%2Flibsolv.git - also look at directly addressed userinstalled solvables --- diff --git a/src/rules.c b/src/rules.c index c6b1a6b5..c92353b5 100644 --- a/src/rules.c +++ b/src/rules.c @@ -2030,15 +2030,13 @@ void solver_createcleandepsmap(Solver *solv) for (i = 0; i < job->count; i += 2) { how = job->elements[i]; - switch (how & SOLVER_JOBMASK) + if ((how & SOLVER_JOBMASK) == SOLVER_USERINSTALLED) { - case SOLVER_USERINSTALLED: what = job->elements[i + 1]; select = how & SOLVER_SELECTMASK; FOR_JOB_SELECT(p, pp, select, what) if (pool->solvables[p].repo == installed) MAPSET(&userinstalled, p - installed->start); - break; } } /* add all positive elements (e.g. locks) to "userinstalled" */ @@ -2192,6 +2190,19 @@ void solver_createcleandepsmap(Solver *solv) if (p > 0) queue_push(&iq, p); } + /* also put directly addressed packages on the install queue + * so we can mark patterns as installed */ + for (i = 0; i < job->count; i += 2) + { + how = job->elements[i]; + if ((how & SOLVER_JOBMASK) == SOLVER_USERINSTALLED) + { + what = job->elements[i + 1]; + select = how & SOLVER_SELECTMASK; + if (select == SOLVER_SOLVABLE && pool->solvables[what].repo != installed) + queue_push(&iq, what); + } + } while (iq.count) { ip = queue_shift(&iq);