solv->instbuddy = solv_calloc(installed->end - installed->start, sizeof(Id));
if (qr->count == 1)
solv->instbuddy[s - pool->solvables - installed->start] = qr->elements[0];
- for (i = 0; i < qp->count; i++)
+ for (i = 0; i < qr->count; i++)
{
- Id p = qp->elements[i];
+ Id p = qr->elements[i];
if (pool->solvables[p].repo != installed)
continue; /* huh? */
if (qp->count > 1 || (solv->instbuddy[p - installed->start] != 0 && solv->instbuddy[p - installed->start] != s - pool->solvables))
if (!allow_all && !p && solv->dupmap_all)
{
queue_push(&solv->orphaned, s - pool->solvables); /* an orphaned package */
- if (solv->keep_orphans)
- p = s - pool->solvables;
+ if (solv->keep_orphans && !(solv->droporphanedmap_all || (solv->droporphanedmap.size && MAPTST(&solv->droporphanedmap, s - pool->solvables - solv->installed->start))))
+ p = s - pool->solvables; /* keep this orphaned package installed */
}
if (!allow_all && qs.count && solv->multiversion.size)