#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include "solver.h"
#include "bitmap.h"
#include "pool.h"
#include "poolarch.h"
#include "util.h"
#include "evr.h"
#include "policy.h"
#include "solverdebug.h"
Go to the source code of this file.
Defines | |
#define | RULES_BLOCK 63 |
#define | DISABLE_UPDATE 1 |
#define | DISABLE_INFARCH 2 |
#define | DISABLE_DUP 3 |
Functions | |
static void | addrpmruleinfo (Solver *solv, Id p, Id d, int type, Id dep) |
static void | solver_createcleandepsmap (Solver *solv) |
static int | dep_possible (Solver *solv, Id dep, Map *m) |
static int | unifyrules_sortcmp (const void *ap, const void *bp, void *dp) |
int | solver_samerule (Solver *solv, Rule *r1, Rule *r2) |
void | solver_unifyrules (Solver *solv) |
Rule * | solver_addrule (Solver *solv, Id p, Id d) |
static Id | makemultiversionconflict (Solver *solv, Id n, Id con) |
static void | addrpmrule (Solver *solv, Id p, Id d, int type, Id dep) |
void | solver_addrpmrulesforsolvable (Solver *solv, Solvable *s, Map *m) |
void | solver_addrpmrulesforweak (Solver *solv, Map *m) |
void | solver_addrpmrulesforupdaters (Solver *solv, Solvable *s, Map *m, int allow_all) |
static Id | finddistupgradepackages (Solver *solv, Solvable *s, Queue *qs, int allow_all) |
static void | addduppackages (Solver *solv, Solvable *s, Queue *qs) |
void | solver_addupdaterule (Solver *solv, Solvable *s, int allow_all) |
static void | disableupdaterule (Solver *solv, Id p) |
static void | reenableupdaterule (Solver *solv, Id p) |
void | solver_addinfarchrules (Solver *solv, Map *addedmap) |
static void | disableinfarchrule (Solver *solv, Id name) |
static void | reenableinfarchrule (Solver *solv, Id name) |
void | solver_createdupmaps (Solver *solv) |
void | solver_freedupmaps (Solver *solv) |
void | solver_addduprules (Solver *solv, Map *addedmap) |
static void | disableduprule (Solver *solv, Id name) |
static void | reenableduprule (Solver *solv, Id name) |
static void | jobtodisablelist (Solver *solv, Id how, Id what, Queue *q) |
void | solver_disablepolicyrules (Solver *solv) |
void | solver_reenablepolicyrules (Solver *solv, int jobidx) |
static int | solver_allruleinfos_cmp (const void *ap, const void *bp, void *dp) |
int | solver_allruleinfos (Solver *solv, Id rid, Queue *rq) |
SolverRuleinfo | solver_ruleinfo (Solver *solv, Id rid, Id *fromp, Id *top, Id *depp) |
void | solver_addchoicerules (Solver *solv) |
void | solver_disablechoicerules (Solver *solv, Rule *r) |
#define RULES_BLOCK 63 |
Definition at line 29 of file rules.c.
Referenced by solver_addrule(), solver_create(), and solver_unifyrules().
#define DISABLE_UPDATE 1 |
Definition at line 1332 of file rules.c.
Referenced by jobtodisablelist(), solver_disablepolicyrules(), and solver_reenablepolicyrules().
#define DISABLE_INFARCH 2 |
Definition at line 1333 of file rules.c.
Referenced by jobtodisablelist(), solver_disablepolicyrules(), and solver_reenablepolicyrules().
#define DISABLE_DUP 3 |
Definition at line 1334 of file rules.c.
Referenced by jobtodisablelist(), solver_disablepolicyrules(), and solver_reenablepolicyrules().
Definition at line 1677 of file rules.c.
References _Rule::d, _Queue::elements, _Rule::p, _Solver::pool, queue_push(), _Solver::ruleinfoq, _Solver::rules, SOLVER_RULE_RPM_SAME_NAME, _Rule::w2, and _Pool::whatprovidesdata.
Referenced by addrpmrule().
static void solver_createcleandepsmap | ( | Solver * | solv | ) | [static] |
Definition at line 2131 of file rules.c.
References _Solver::cleandepsmap, _Queue::count, _Rule::d, dep_possible(), _Queue::elements, _Repo::end, FOR_JOB_SELECT, FOR_PROVIDES, FOR_RULELITERALS, _Repo::idarraydata, _Solver::installed, _Solver::job, _Solver::jobrules, map_empty(), map_free(), map_init(), MAPCLR, MAPSET, MAPTST, _Pool::nsolvables, _Rule::p, _Solver::pool, queue_free(), queue_init(), queue_push(), queue_shift(), _Solvable::recommends, _Solvable::repo, _Solvable::requires, _Solver::rules, _Solver::ruletojob, solvable2str(), _Pool::solvables, SOLVER_CLEANDEPS, SOLVER_ERASE, SOLVER_JOBMASK, SOLVER_SELECTMASK, SOLVER_SOLVABLE, SOLVER_USERINSTALLED, solvid2str(), _Repo::start, and _Solvable::supplements.
Referenced by solver_disablepolicyrules(), and solver_reenablepolicyrules().
Definition at line 41 of file rules.c.
References _Reldep::evr, _Reldep::flags, FOR_PROVIDES, GETRELDEP, ISRELDEP, MAPTST, _Reldep::name, _Solver::pool, REL_AND, REL_NAMESPACE, solver_dep_installed(), and solver_splitprovides().
Referenced by solver_addrpmrulesforweak(), and solver_createcleandepsmap().
static int unifyrules_sortcmp | ( | const void * | ap, | |
const void * | bp, | |||
void * | dp | |||
) | [static] |
Definition at line 82 of file rules.c.
References _Rule::d, _Rule::p, _Rule::w2, and _Pool::whatprovidesdata.
Referenced by solver_samerule(), and solver_unifyrules().
Definition at line 120 of file rules.c.
References _Solver::pool, and unifyrules_sortcmp().
Referenced by solver_solve().
void solver_unifyrules | ( | Solver * | solv | ) |
Definition at line 133 of file rules.c.
References _Rule::d, IF_POOLDEBUG, _Solver::nrules, _Solver::pool, POOL_DEBUG, _Solver::rules, RULES_BLOCK, SAT_DEBUG_SCHUBI, SAT_DEBUG_STATS, sat_extend_resize(), sat_sort(), unifyrules_sortcmp(), and _Pool::whatprovidesdata.
Referenced by solver_solve().
Definition at line 259 of file rules.c.
References _Rule::d, IF_POOLDEBUG, _Rule::n1, _Rule::n2, _Solver::nrules, _Rule::p, _Solver::pool, POOL_DEBUG, _Solver::rpmrules_end, _Solver::rules, RULES_BLOCK, SAT_DEBUG_RULE_CREATION, sat_extend(), solver_printrule(), _Rule::w1, _Rule::w2, and _Pool::whatprovidesdata.
Referenced by addrpmrule(), setpropagatelearn(), solver_addchoicerules(), solver_addduprules(), solver_addinfarchrules(), solver_addjobrule(), solver_addupdaterule(), and solver_solve().
Definition at line 394 of file rules.c.
References _Solvable::arch, _Queue::count, FOR_PROVIDES, MAPTST, _Solvable::name, _Solver::noobsoletes, _Solver::pool, pool_match_nevr(), pool_queuetowhatprovides(), queue_init_buffer(), queue_push(), and _Pool::solvables.
Referenced by solver_addrpmrulesforsolvable().
Definition at line 423 of file rules.c.
References addrpmruleinfo(), _Solver::ruleinfoq, and solver_addrule().
Referenced by solver_addrpmrulesforsolvable().
Definition at line 452 of file rules.c.
References addrpmrule(), _Pool::allowselfconflicts, _Solvable::arch, _Solvable::conflicts, _Queue::count, dep2str(), _Solvable::evr, _Solver::fixmap, _Solver::fixmap_all, _Reldep::flags, FOR_PROVIDES, GETRELDEP, id2str(), _Repo::idarraydata, IF_POOLDEBUG, _Pool::implicitobsoleteusesprovides, _Solver::installed, ISRELDEP, makemultiversionconflict(), MAPSET, MAPTST, _Reldep::name, _Solvable::name, _Pool::noinstalledobsoletes, _Solver::noobsoletes, _Pool::nscallback, _Pool::nscallbackdata, _Solvable::obsoletes, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, _Solver::pool, pool_colormatch(), POOL_DEBUG, pool_installable(), pool_match_nevr(), pool_whatprovides_ptr(), queue_free(), queue_init_buffer(), queue_push(), queue_shift(), _Solvable::recommends, REL_NAMESPACE, _Solvable::repo, _Solvable::requires, SAT_DEBUG_RULE_CREATION, SAT_DEBUG_SCHUBI, _Map::size, solvable2str(), solvable_selfprovidedep(), _Pool::solvables, SOLVER_RULE_RPM_IMPLICIT_OBSOLETES, SOLVER_RULE_RPM_INSTALLEDPKG_OBSOLETES, SOLVER_RULE_RPM_NOT_INSTALLABLE, SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP, SOLVER_RULE_RPM_PACKAGE_CONFLICT, SOLVER_RULE_RPM_PACKAGE_OBSOLETES, SOLVER_RULE_RPM_PACKAGE_REQUIRES, SOLVER_RULE_RPM_SAME_NAME, SOLVER_RULE_RPM_SELF_CONFLICT, solvid2str(), _Repo::start, _Solvable::suggests, SYSTEMSOLVABLE, and _Pool::whatprovidesdata.
Referenced by solver_addrpmrulesforupdaters(), solver_addrpmrulesforweak(), solver_allruleinfos(), solver_ruleinfo(), and solver_solve().
Definition at line 762 of file rules.c.
References dep_possible(), _Solvable::enhances, _Repo::idarraydata, MAPTST, _Pool::nsolvables, _Solver::pool, POOL_DEBUG, pool_installable(), _Solvable::repo, SAT_DEBUG_SCHUBI, _Pool::solvables, solver_addrpmrulesforsolvable(), and _Solvable::supplements.
Referenced by solver_solve().
Definition at line 820 of file rules.c.
References _Queue::count, _Queue::elements, MAPTST, policy_findupdatepackages(), _Solver::pool, POOL_DEBUG, queue_free(), queue_init_buffer(), SAT_DEBUG_SCHUBI, _Pool::solvables, and solver_addrpmrulesforsolvable().
Referenced by solver_solve().
static Id finddistupgradepackages | ( | Solver * | solv, | |
Solvable * | s, | |||
Queue * | qs, | |||
int | allow_all | |||
) | [static] |
Definition at line 855 of file rules.c.
References _Queue::count, _Queue::elements, _Solvable::evr, policy_findupdatepackages(), _Solver::pool, solvable_identical(), _Pool::solvables, and SYSTEMSOLVABLE.
Referenced by solver_addupdaterule().
Definition at line 889 of file rules.c.
References _Queue::count, _Solver::dupmap, _Queue::elements, MAPTST, _Solver::noupdateprovide, policy_findupdatepackages(), queue_free(), queue_init_buffer(), and queue_pushunique().
Referenced by solver_addupdaterule().
Definition at line 918 of file rules.c.
References addduppackages(), _Solvable::arch, _Queue::count, _Solver::dupinvolvedmap, _Solver::dupmap_all, _Queue::elements, _Repo::end, _Solvable::evr, finddistupgradepackages(), _Solver::installed, MAPTST, _Solver::multiversionupdaters, _Solvable::name, _Solver::noobsoletes, _Solver::orphaned, policy_findupdatepackages(), _Solver::pool, POOL_DEBUG, pool_queuetowhatprovides(), queue_free(), queue_init_buffer(), queue_push(), queue_shift(), _Solvable::repo, sat_calloc(), SAT_DEBUG_SCHUBI, _Map::size, _Pool::solvables, solver_addrule(), _Repo::start, SYSTEMSOLVABLE, _Solver::updatemap, and _Solver::updatemap_all.
Referenced by solver_solve().
Definition at line 980 of file rules.c.
References _Rule::d, _Solver::featurerules, _Solver::installed, MAPSET, _Solver::noupdate, _Rule::p, _Solver::rules, solver_disablerule(), _Repo::start, and _Solver::updaterules.
Referenced by solver_disablepolicyrules().
Definition at line 994 of file rules.c.
References _Rule::d, _Solver::featurerules, IF_POOLDEBUG, _Solver::installed, MAPCLR, _Solver::noupdate, _Rule::p, _Solver::pool, POOL_DEBUG, _Solver::rules, SAT_DEBUG_SOLUTIONS, solver_enablerule(), solver_printruleclass(), _Repo::start, and _Solver::updaterules.
Referenced by solver_reenablepolicyrules().
Definition at line 1036 of file rules.c.
References _Solvable::arch, _Queue::count, _Solver::dupinvolvedmap, _Solver::dupmap_all, _Queue::elements, FOR_PROVIDES, _Pool::id2arch, _Solver::infarchrules, _Solver::infarchrules_end, _Pool::installed, _Pool::lastarch, MAPTST, _Solvable::name, _Solver::nrules, _Pool::nsolvables, _Solver::pool, queue_empty(), queue_free(), queue_init(), queue_push(), queue_pushunique(), _Solvable::repo, _Map::size, _Pool::solvables, solver_addrule(), and SYSTEMSOLVABLE.
Referenced by solver_solve().
Definition at line 1124 of file rules.c.
References _Rule::d, _Solver::infarchrules, _Solvable::name, _Rule::p, _Solver::pool, _Solver::rules, _Pool::solvables, and solver_disablerule().
Referenced by solver_disablepolicyrules().
Definition at line 1137 of file rules.c.
References _Rule::d, IF_POOLDEBUG, _Solver::infarchrules, _Solvable::name, _Rule::p, _Solver::pool, POOL_DEBUG, _Solver::rules, SAT_DEBUG_SOLUTIONS, _Pool::solvables, solver_enablerule(), and solver_printruleclass().
Referenced by solver_reenablepolicyrules().
void solver_createdupmaps | ( | Solver * | solv | ) |
Definition at line 1167 of file rules.c.
References _Queue::count, _Solver::dupinvolvedmap, _Solver::dupmap, _Queue::elements, FOR_PROVIDES, FOR_REPO_SOLVABLES, _Repo::idarraydata, _Solver::job, map_init(), MAPCLR, MAPSET, _Solvable::name, _Pool::nrepos, _Pool::nsolvables, _Solvable::obsoletes, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, _Solver::pool, pool_colormatch(), pool_id2repo(), pool_match_nevr(), _Solvable::repo, _Pool::solvables, SOLVER_DISTUPGRADE, SOLVER_JOBMASK, SOLVER_SELECTMASK, SOLVER_SOLVABLE_REPO, and SYSTEMSOLVABLE.
Referenced by solver_solve().
void solver_freedupmaps | ( | Solver * | solv | ) |
Definition at line 1227 of file rules.c.
References _Solver::dupmap, and map_free().
Referenced by solver_solve().
Definition at line 1235 of file rules.c.
References _Solver::dupinvolvedmap, _Solver::dupmap, _Solver::duprules, _Solver::duprules_end, _Repo::end, _Solvable::evr, FOR_PROVIDES, _Solver::installed, map_grow(), MAPSET, MAPTST, _Solvable::name, _Solver::nrules, _Pool::nsolvables, _Solver::pool, _Solvable::repo, _Map::size, solvable_identical(), _Pool::solvables, solver_addrule(), _Repo::start, SYSTEMSOLVABLE, and _Solver::updatemap.
Referenced by solver_solve().
Definition at line 1290 of file rules.c.
References _Rule::d, _Solver::duprules, _Solvable::name, _Rule::p, _Solver::pool, _Solver::rules, _Pool::solvables, and solver_disablerule().
Referenced by solver_disablepolicyrules().
Definition at line 1303 of file rules.c.
References _Rule::d, _Solver::duprules, IF_POOLDEBUG, _Solvable::name, _Rule::p, _Solver::pool, POOL_DEBUG, _Solver::rules, SAT_DEBUG_SOLUTIONS, _Pool::solvables, solver_enablerule(), and solver_printruleclass().
Referenced by solver_reenablepolicyrules().
Definition at line 1337 of file rules.c.
References _Queue::count, DISABLE_DUP, DISABLE_INFARCH, DISABLE_UPDATE, _Solver::duprules, _Solver::duprules_end, _Queue::elements, _Repo::end, _Solvable::evr, _Reldep::evr, evrcmp(), EVRCMP_COMPARE_EVONLY, _Reldep::flags, FOR_JOB_SELECT, FOR_PROVIDES, GETRELDEP, id2str(), _Repo::idarraydata, _Pool::implicitobsoleteusesprovides, _Solver::infarchrules, _Solver::infarchrules_end, _Solver::installed, ISRELDEP, map_free(), map_grow(), MAPCLR, MAPSET, MAPTST, _Solvable::name, _Reldep::name, _Solver::noobsoletes, _Solvable::obsoletes, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, POLICY_ILLEGAL_ARCHCHANGE, POLICY_ILLEGAL_DOWNGRADE, POLICY_ILLEGAL_VENDORCHANGE, policy_is_illegal(), _Solver::pool, pool_colormatch(), pool_match_nevr(), queue_push2(), queue_truncate(), REL_ARCH, REL_EQ, _Solvable::repo, _Map::size, _Pool::solvables, SOLVER_ERASE, SOLVER_INSTALL, SOLVER_JOBMASK, SOLVER_NOAUTOSET, SOLVER_SELECTMASK, SOLVER_SETARCH, SOLVER_SETEV, SOLVER_SETEVR, SOLVER_SETMASK, SOLVER_SETREPO, SOLVER_SETVENDOR, SOLVER_SOLVABLE, SOLVER_SOLVABLE_NAME, SOLVER_SOLVABLE_PROVIDES, and _Repo::start.
Referenced by solver_disablepolicyrules(), and solver_reenablepolicyrules().
void solver_disablepolicyrules | ( | Solver * | solv | ) |
Definition at line 1558 of file rules.c.
References _Solver::cleandepsmap, _Queue::count, _Rule::d, DISABLE_DUP, DISABLE_INFARCH, DISABLE_UPDATE, disableduprule(), disableinfarchrule(), disableupdaterule(), _Queue::elements, _Solver::installed, _Solver::job, _Solver::jobrules, jobtodisablelist(), MAPTST, MAPZERO, _Solver::noupdate, queue_free(), queue_init_buffer(), queue_push2(), _Solver::rules, _Solver::ruletojob, _Map::size, solver_createcleandepsmap(), and _Repo::start.
Referenced by refine_suggestion(), and solver_solve().
void solver_reenablepolicyrules | ( | Solver * | solv, | |
int | jobidx | |||
) |
Definition at line 1612 of file rules.c.
References _Solver::cleandepsmap, _Queue::count, _Rule::d, DISABLE_DUP, DISABLE_INFARCH, DISABLE_UPDATE, _Queue::elements, _Solver::installed, _Solver::job, _Solver::jobrules, jobtodisablelist(), MAPTST, queue_free(), queue_init_buffer(), queue_push2(), reenableduprule(), reenableinfarchrule(), reenableupdaterule(), _Solver::rules, _Solver::ruletojob, _Map::size, solver_createcleandepsmap(), and _Repo::start.
Referenced by analyze_unsolvable(), makeruledecisions(), and refine_suggestion().
static int solver_allruleinfos_cmp | ( | const void * | ap, | |
const void * | bp, | |||
void * | dp | |||
) | [static] |
Definition at line 1758 of file rules.c.
Referenced by solver_allruleinfos().
Definition at line 1779 of file rules.c.
References _Queue::count, _Rule::d, _Queue::elements, _Rule::p, _Solver::pool, queue_empty(), queue_push(), queue_shift(), _Solver::rpmrules_end, _Solver::ruleinfoq, _Solver::rules, sat_sort(), _Pool::solvables, solver_addrpmrulesforsolvable(), solver_allruleinfos_cmp(), solver_ruleinfo(), and _Rule::w2.
Definition at line 1831 of file rules.c.
References _Solver::choicerules, _Queue::count, _Rule::d, _Solver::duprules, _Queue::elements, _Solver::featurerules, _Solver::infarchrules, _Solver::installed, _Solver::job, _Solver::jobrules, _Solver::learntrules, _Solvable::name, _Rule::p, _Solver::pool, queue_free(), queue_init(), queue_push(), _Solver::ruleinfoq, _Solver::rules, _Solver::ruletojob, _Pool::solvables, solver_addrpmrulesforsolvable(), SOLVER_RULE_CHOICE, SOLVER_RULE_DISTUPGRADE, SOLVER_RULE_FEATURE, SOLVER_RULE_INFARCH, SOLVER_RULE_JOB, SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP, SOLVER_RULE_LEARNT, SOLVER_RULE_RPM, SOLVER_RULE_UNKNOWN, SOLVER_RULE_UPDATE, SOLVER_SELECTMASK, SOLVER_SOLVABLE_ONE_OF, _Repo::start, SYSTEMSOLVABLE, _Solver::updaterules, and _Rule::w2.
Referenced by solver_allruleinfos(), solver_printproblemruleinfo(), and solver_problemruleinfo().
void solver_addchoicerules | ( | Solver * | solv | ) |
Definition at line 1935 of file rules.c.
References _Solver::choicerules, _Solver::choicerules_end, _Solver::choicerules_ref, _Queue::count, _Rule::d, _Solver::duprules, _Queue::elements, _Solver::featurerules, FOR_PROVIDES, FOR_RULELITERALS, havechoice(), _Repo::idarraydata, _Pool::implicitobsoleteusesprovides, _Solver::infarchrules, _Pool::installed, map_empty(), map_free(), map_init(), MAPSET, MAPTST, _Solvable::name, _Solver::nrules, _Pool::nsolvables, _Solvable::obsoletes, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, _Rule::p, policy_is_illegal(), _Solver::pool, pool_colormatch(), pool_match_nevr(), pool_queuetowhatprovides(), queue_empty(), queue_free(), queue_init(), queue_push(), _Solvable::repo, _Solver::rpmrules_end, _Solver::rules, sat_calloc(), SAT_DEBUG_RESULT, _Pool::solvables, solver_addrule(), solver_printrule(), _Repo::start, _Solver::updaterules, _Rule::w2, and _Solver::weakruleq.
Referenced by solver_solve().
Definition at line 2102 of file rules.c.
References _Solver::choicerules, _Solver::choicerules_ref, _Rule::d, FOR_RULELITERALS, map_init(), MAPCLR, MAPSET, MAPTST, _Pool::nsolvables, _Solver::pool, _Solver::rules, and solver_disablerule().
Referenced by analyze_unsolvable().