#define RULES_BLOCK 63
-static void reenablepolicyrules(Solver *solv, Queue *job, int jobidx);
+static void reenablepolicyrules(Solver *solv, int jobidx);
static void addrpmruleinfo(Solver *solv, Id p, Id d, int type, Id dep);
/********************************************************************
/**********************************************************************************/
/* a problem is an item on the solver's problem list. It can either be >0, in that
- * case it is a update rule, or it can be <0, which makes it refer to a job
+ * case it is a update/infarch/dup rule, or it can be <0, which makes it refer to a job
* consisting of multiple job rules.
*/
v = ri;
disableproblem(solv, v);
if (v < 0)
- reenablepolicyrules(solv, &solv->job, -(v + 1));
+ reenablepolicyrules(solv, -(v + 1));
}
POOL_DEBUG(SAT_DEBUG_SCHUBI, "----- makeruledecisions end; size decisionq: %d -----\n",solv->decisionq.count);
/*-------------------------------------------------------------------
* enable weak rules
*
- * Enable all rules, except learnt rules, which are
- * - disabled and weak (set in weakrulemap)
+ * Reenable all disabled weak rules (marked in weakrulemap)
*
*/
/* disable all policy rules that are in conflict with our job list */
static void
-disablepolicyrules(Solver *solv, Queue *job)
+disablepolicyrules(Solver *solv)
{
+ Queue *job = &solv->job;
int i, j;
Queue allq;
Rule *r;
/* we just disabled job #jobidx, now reenable all policy rules that were
* disabled because of this job */
static void
-reenablepolicyrules(Solver *solv, Queue *job, int jobidx)
+reenablepolicyrules(Solver *solv, int jobidx)
{
+ Queue *job = &solv->job;
int i, j;
Queue q, allq;
Rule *r;
* get's installed. The generated rule is thus:
* -patch|-cpack|opack1|opack2|...
*/
-Id
+static Id
makemultiversionconflict(Solver *solv, Id n, Id con)
{
Pool *pool = solv->pool;
solver_printruleclass(solv, SAT_DEBUG_UNSOLVABLE, solv->rules + lastweak);
disableproblem(solv, v);
if (v < 0)
- reenablepolicyrules(solv, &solv->job, -(v + 1));
+ reenablepolicyrules(solv, -(v + 1));
reset_solver(solv);
return 1;
}
/* FIXME: think about conflicting assertions */
static void
-refine_suggestion(Solver *solv, Queue *job, Id *problem, Id sug, Queue *refined, int essentialok)
+refine_suggestion(Solver *solv, Id *problem, Id sug, Queue *refined, int essentialok)
{
Pool *pool = solv->pool;
int i, j;
}
}
queue_empty(refined);
- if (!essentialok && sug < 0 && (job->elements[-sug - 1] & SOLVER_ESSENTIAL) != 0)
+ if (!essentialok && sug < 0 && (solv->job.elements[-sug - 1] & SOLVER_ESSENTIAL) != 0)
return;
queue_init(&disabled);
queue_push(refined, sug);
enableproblem(solv, problem[i]);
if (sug < 0)
- reenablepolicyrules(solv, job, -(sug + 1));
+ reenablepolicyrules(solv, -(sug + 1));
else if (sug >= solv->updaterules && sug < solv->updaterules_end)
{
/* enable feature rule */
nupdate++;
else
{
- if (!essentialok && (job->elements[-v -1] & SOLVER_ESSENTIAL) != 0)
+ if (!essentialok && (solv->job.elements[-v -1] & SOLVER_ESSENTIAL) != 0)
continue; /* not that one! */
njob++;
}
enablerule(solv, r); /* enable corresponding feature rule */
}
if (v < 0)
- reenablepolicyrules(solv, job, -(v + 1));
+ reenablepolicyrules(solv, -(v + 1));
}
else
{
/* reset policy rules */
for (i = 0; problem[i]; i++)
enableproblem(solv, problem[i]);
- disablepolicyrules(solv, job);
+ disablepolicyrules(solv);
/* disable problem rules again */
for (i = 0; problem[i]; i++)
disableproblem(solv, problem[i]);
* convert problem data into a form usable for refining.
* Returns the number of problems.
*/
-int
+static int
prepare_solutions(Solver *solv)
{
int i, j = 1, idx = 1;
for (i = 0; i < problem.count; i++)
{
int solstart = solv->solutions.count;
- refine_suggestion(solv, &solv->job, problem.elements, problem.elements[i], &solution, essentialok);
+ refine_suggestion(solv, problem.elements, problem.elements[i], &solution, essentialok);
queue_push(&solv->solutions, 0); /* reserve room for number of elements */
for (j = 0; j < solution.count; j++)
convertsolution(solv, solution.elements[j], &solv->solutions);
queue_push(&solv->ruleassertions, i);
/* disable update rules that conflict with our job */
- disablepolicyrules(solv, job);
+ disablepolicyrules(solv);
/* make decisions based on job/update assertions */
makeruledecisions(solv);