int i;
IF_POOLDEBUG (SOLV_DEBUG_POLICY)
{
- POOL_DEBUG (SOLV_DEBUG_POLICY, "creating a branch:\n");
+ POOL_DEBUG (SOLV_DEBUG_POLICY, "creating a branch [data=%d]:\n", data);
for (i = 0; i < dq->count; i++)
POOL_DEBUG (SOLV_DEBUG_POLICY, " - %s\n", pool_solvid2str(pool, dq->elements[i]));
}
#if 0
{
int i;
- printf("branch group level %d [%d-%d] %d %d:\n", solv->branches.elements[end - 1], start, end, solv->branches.elements[end - 4], solv->branches.elements[end - 3]);
+ printf("branch group level %d [%d-%d] %d %d:\n", solv->branches.elements[end - 1], end - solv->branches.elements[end - 2], end, solv->branches.elements[end - 4], solv->branches.elements[end - 3]);
for (i = end - solv->branches.elements[end - 2]; i < end - 4; i++)
printf("%c %c%s\n", i == pos ? 'x' : ' ', solv->branches.elements[i] >= 0 ? ' ' : '-', pool_solvid2str(pool, solv->branches.elements[i] >= 0 ? solv->branches.elements[i] : -solv->branches.elements[i]));
}
queue_truncate(dq, blkcnt);
break;
}
+ if (solv->decisionmap[p] < 0)
+ continue;
if (dqmap)
{
if (!MAPTST(dqmap, p))
}
else
{
- if (solv->decisionmap[p] < 0)
- continue;
if (solv->process_orphans && solv->installed && pool->solvables[p].repo == solv->installed && (solv->droporphanedmap_all || (solv->droporphanedmap.size && MAPTST(&solv->droporphanedmap, p - solv->installed->start))))
continue;
}
if (s->repo == installed)
{
queue_push2(solv->update_targets, p, p);
+ FOR_PROVIDES(pi, pip, s->name)
+ {
+ Solvable *si = pool->solvables + pi;
+ if (si->repo == installed && si->name == s->name && pi != p)
+ queue_push2(solv->update_targets, pi, p);
+ }
return;
}
identicalp = 0;
p = -r->p;
if (!MAPTST(addedmap, p))
{
- /* should never happen, but... */
+ /* this can happen with complex dependencies that have more than one pos literal */
if (!solv->addedmap_deduceq.count || solv->addedmap_deduceq.elements[solv->addedmap_deduceq.count - 1] != -p)
queue_push(&solv->addedmap_deduceq, -p);
continue;
if (p > 0)
MAPSET(addedmap, p);
else
- MAPCLR(addedmap, p);
+ MAPCLR(addedmap, -p);
}
}
int hasbestinstalljob = 0;
int hasfavorjob = 0;
int haslockjob = 0;
+ int hasblacklistjob = 0;
solve_start = solv_timems(0);
POOL_DEBUG(SOLV_DEBUG_JOB, "job: %s %s\n", (how & SOLVER_JOBMASK) == SOLVER_FAVOR ? "favor" : "disfavor", solver_select2str(pool, select, what));
hasfavorjob = 1;
break;
+ case SOLVER_BLACKLIST:
+ POOL_DEBUG(SOLV_DEBUG_JOB, "job: blacklist %s\n", solver_select2str(pool, select, what));
+ hasblacklistjob = 1;
+ break;
default:
POOL_DEBUG(SOLV_DEBUG_JOB, "job: unknown job\n");
break;
else
solv->yumobsrules = solv->yumobsrules_end = solv->nrules;
+ if (hasblacklistjob)
+ solver_addblackrules(solv);
+ else
+ solv->blackrules = solv->blackrules_end = solv->nrules;
+
if (solv->havedisfavored && solv->strongrecommends && solv->recommendsruleq)
solver_addrecommendsrules(solv);
else
case SOLVER_DISFAVOR:
strstart = "disfavor ";
break;
+ case SOLVER_BLACKLIST:
+ strstart = "blacklist ";
+ break;
default:
strstart = "unknown job ";
break;