queue_free(&q);
}
+/* we just removed a package from the cleandeps map, now reenable all policy rules that were
+ * disabled because of this */
+void
+solver_reenablepolicyrules_cleandeps(Solver *solv, Id pkg)
+{
+ Queue *job = &solv->job;
+ int i, j;
+ Queue allq;
+ Rule *r;
+ Id lastjob = -1;
+ Id allqbuf[128];
+
+ queue_init_buffer(&allq, allqbuf, sizeof(allqbuf)/sizeof(*allqbuf));
+ for (i = solv->jobrules; i < solv->jobrules_end; i++)
+ {
+ r = solv->rules + i;
+ if (r->d < 0) /* disabled? */
+ continue;
+ j = solv->ruletojob.elements[i - solv->jobrules];
+ if (j == lastjob)
+ continue;
+ lastjob = j;
+ jobtodisablelist(solv, job->elements[j], job->elements[j + 1], &allq);
+ }
+ for (i = 0; i < allq.count; i += 2)
+ if (allq.elements[i] == DISABLE_UPDATE && allq.elements[i + 1] == pkg)
+ break;
+ if (i == allq.count)
+ reenableupdaterule(solv, pkg);
+ queue_free(&allq);
+}
+
/***********************************************************************
***
/* policy rule disabling/reenabling */
extern void solver_disablepolicyrules(struct _Solver *solv);
extern void solver_reenablepolicyrules(struct _Solver *solv, int jobidx);
+extern void solver_reenablepolicyrules_cleandeps(struct _Solver *solv, Id pkg);
/* rule info */
extern int solver_allruleinfos(struct _Solver *solv, Id rid, Queue *rq);
}
queue_push(solv->cleandeps_mistakes, i);
MAPCLR(&solv->cleandepsmap, i - solv->installed->start);
+ solver_reenablepolicyrules_cleandeps(solv, i);
mademistake = 1;
}
}
if (mademistake)
{
level = 1;
- revert(solv, level);
+ solver_reset(solv);
}
return level;
}