Buckets:
| /* | |
| * Copyright (c) 2007, Novell Inc. | |
| * | |
| * This program is licensed under the BSD license, read LICENSE.BSD | |
| * for further information | |
| */ | |
| /* | |
| * solver.h | |
| * | |
| */ | |
| extern "C" { | |
| struct s_Solver { | |
| Pool *pool; /* back pointer to pool */ | |
| Queue job; /* copy of the job we're solving */ | |
| int (*solution_callback)(struct s_Solver *solv, void *data); | |
| void *solution_callback_data; | |
| int pooljobcnt; /* number of pooljob entries in job queue */ | |
| Repo *installed; /* copy of pool->installed */ | |
| /* list of rules, ordered | |
| * pkg rules first, then features, updates, jobs, learnt | |
| * see start/end offsets below | |
| */ | |
| Rule *rules; /* all rules */ | |
| Id nrules; /* [Offset] index of the last rule */ | |
| Id lastpkgrule; /* last package rule we added */ | |
| Queue ruleassertions; /* Queue of all assertion rules */ | |
| /* start/end offset for rule 'areas' */ | |
| Id pkgrules_end; /* [Offset] dep rules end */ | |
| Id featurerules; /* feature rules start/end */ | |
| Id featurerules_end; | |
| Id updaterules; /* policy rules, e.g. keep packages installed or update. All literals > 0 */ | |
| Id updaterules_end; | |
| Id jobrules; /* user rules */ | |
| Id jobrules_end; | |
| Id infarchrules; /* inferior arch rules */ | |
| Id infarchrules_end; | |
| Id duprules; /* dist upgrade rules */ | |
| Id duprules_end; | |
| Id bestrules; /* rules from SOLVER_FORCEBEST */ | |
| Id bestrules_up; /* update rule part starts here*/ | |
| Id bestrules_end; | |
| Id *bestrules_info; /* < 0 : install rule, > 0 : pkg that needs to be updated */ | |
| Id yumobsrules; /* rules from yum obsoletes handling */ | |
| Id yumobsrules_end; | |
| Id *yumobsrules_info; /* the dependency for each rule */ | |
| Id blackrules; /* rules from blacklisted packages */ | |
| Id blackrules_end; | |
| Id strictrepopriorules; /* rules from strict priority repositories */ | |
| Id strictrepopriorules_end; | |
| Id choicerules; /* choice rules (always weak) */ | |
| Id choicerules_end; | |
| Id *choicerules_info; /* the rule we used to generate the choice rule */ | |
| Id recommendsrules; /* rules from recommends pkg rules with disfavored literals */ | |
| Id recommendsrules_end; | |
| Id *recommendsrules_info; /* the original pkg rule rule */ | |
| Id learntrules; /* learnt rules, (end == nrules) */ | |
| Map noupdate; /* don't try to update these | |
| installed solvables */ | |
| Map multiversion; /* ignore obsoletes for these (multiinstall) */ | |
| Map updatemap; /* bring these installed packages to the newest version */ | |
| int updatemap_all; /* bring all packages to the newest version */ | |
| Map bestupdatemap; /* create best rule for those packages */ | |
| int bestupdatemap_all; /* bring all packages to the newest version */ | |
| Map fixmap; /* fix these packages */ | |
| int fixmap_all; /* fix all packages */ | |
| Queue weakruleq; /* index into 'rules' for weak ones */ | |
| Map weakrulemap; /* map rule# to '1' for weak rules, 1..learntrules */ | |
| Id *watches; /* Array of rule offsets | |
| * watches has nsolvables*2 entries and is addressed from the middle | |
| * middle-solvable : decision to conflict, offset point to linked-list of rules | |
| * middle+solvable : decision to install: offset point to linked-list of rules | |
| */ | |
| Queue ruletojob; /* index into job queue: jobs for which a rule exits */ | |
| /* our decisions: */ | |
| Queue decisionq; /* >0:install, <0:remove/conflict */ | |
| Queue decisionq_why; /* index of rule, Offset into rules */ | |
| Queue decisionq_reason; /* reason for decision, indexed by level */ | |
| Id *decisionmap; /* map for all available solvables, | |
| * = 0: undecided | |
| * > 0: level of decision when installed, | |
| * < 0: level of decision when conflict */ | |
| /* learnt rule history */ | |
| Queue learnt_why; | |
| Queue learnt_pool; | |
| Queue branches; | |
| int propagate_index; /* index into decisionq for non-propagated decisions */ | |
| Queue problems; /* list of lists of conflicting rules, < 0 for job rules */ | |
| Queue solutions; /* refined problem storage space */ | |
| Queue orphaned; /* orphaned packages (to be removed?) */ | |
| int stats_learned; /* statistic */ | |
| int stats_unsolvable; /* statistic */ | |
| Map recommendsmap; /* recommended packages from decisionmap */ | |
| Map suggestsmap; /* suggested packages from decisionmap */ | |
| int recommends_index; /* recommendsmap/suggestsmap is created up to this level */ | |
| Queue *recommendscplxq; | |
| Queue *suggestscplxq; | |
| Id *obsoletes; /* obsoletes for each installed solvable */ | |
| Id *obsoletes_data; /* data area for obsoletes */ | |
| Id *specialupdaters; /* updaters for packages with a limited update rule */ | |
| /*------------------------------------------------------------------------------------------------------------- | |
| * Solver configuration | |
| *-------------------------------------------------------------------------------------------------------------*/ | |
| int allowdowngrade; /* allow downgrading installed solvable */ | |
| int allownamechange; /* allow changing name of installed solvables */ | |
| int allowarchchange; /* allow changing architecture of installed solvables */ | |
| int allowvendorchange; /* allow changing vendor of installed solvables */ | |
| int allowuninstall; /* allow removal of installed solvables */ | |
| int noupdateprovide; /* true: update packages needs not to provide old package */ | |
| int needupdateprovide; /* true: update packages must provide old package */ | |
| int dosplitprovides; /* true: consider legacy split provides */ | |
| int dontinstallrecommended; /* true: do not install recommended packages */ | |
| int addalreadyrecommended; /* true: also install recommended packages that were already recommended by the installed packages */ | |
| int dontshowinstalledrecommended; /* true: do not show recommended packages that are already installed */ | |
| int noinfarchcheck; /* true: do not forbid inferior architectures */ | |
| int keepexplicitobsoletes; /* true: honor obsoletes during multiinstall */ | |
| int bestobeypolicy; /* true: stay in policy with the best rules */ | |
| int noautotarget; /* true: do not assume targeted for up/dup jobs that contain no installed solvable */ | |
| int focus_installed; /* true: resolve update rules first */ | |
| int focus_best; /* true: resolve job dependencies first */ | |
| int focus_new; /* true: resolve job dependencies first but ignore dependencies met by installed packages */ | |
| int do_yum_obsoletes; /* true: add special yumobs rules */ | |
| int urpmreorder; /* true: do special urpm package reordering */ | |
| int strongrecommends; /* true: create weak rules for recommends */ | |
| int install_also_updates; /* true: do not prune install job rules to installed packages */ | |
| int only_namespace_recommended; /* true: only install packages recommended by namespace */ | |
| int strict_repo_priority; /* true: only use packages from highest precedence/priority */ | |
| int process_orphans; /* true: do special orphan processing */ | |
| Map dupmap; /* dup to those packages */ | |
| Map dupinvolvedmap; /* packages involved in dup process */ | |
| int dupinvolvedmap_all; /* all packages are involved */ | |
| int dup_allowdowngrade; /* dup mode: allow to downgrade installed solvable */ | |
| int dup_allownamechange; /* dup mode: allow to change name of installed solvable */ | |
| int dup_allowarchchange; /* dup mode: allow to change architecture of installed solvables */ | |
| int dup_allowvendorchange; /* dup mode: allow to change vendor of installed solvables */ | |
| Map droporphanedmap; /* packages to drop in dup mode */ | |
| int droporphanedmap_all; | |
| Map cleandepsmap; /* try to drop these packages as of cleandeps erases */ | |
| Queue *ruleinfoq; /* tmp space for solver_ruleinfo() */ | |
| Queue *cleandeps_updatepkgs; /* packages we update in cleandeps mode */ | |
| Queue *cleandeps_mistakes; /* mistakes we made */ | |
| Queue *update_targets; /* update to specific packages */ | |
| Queue *installsuppdepq; /* deps from the install namespace provides hack */ | |
| Queue addedmap_deduceq; /* deduce addedmap from pkg rules */ | |
| Id *instbuddy; /* buddies of installed packages */ | |
| int keep_orphans; /* how to treat orphans */ | |
| int break_orphans; /* how to treat orphans */ | |
| Queue *brokenorphanrules; /* broken rules of orphaned packages */ | |
| Map allowuninstallmap; /* ok to uninstall those */ | |
| int allowuninstall_all; | |
| Map excludefromweakmap; /* remove them from candidates for supplements and recommends */ | |
| Id *favormap; /* favor job index, > 0: favored, < 0: disfavored */ | |
| int havedisfavored; /* do we have disfavored packages? */ | |
| int installedpos; /* for resolve_installed */ | |
| int do_extra_reordering; /* reorder for future installed packages */ | |
| Queue *recommendsruleq; /* pkg rules comming from recommends */ | |
| }; | |
| typedef struct s_Solver Solver; | |
| /* | |
| * queue commands | |
| */ | |
| /* ORUPDATE makes SOLVER_INSTALL not prune to installed | |
| * packages, thus updating installed packages */ | |
| /* FORCEBEST makes the solver insist on best packages, so | |
| * you will get problem reported if the best package is | |
| * not installable. This can be used with INSTALL, UPDATE | |
| * and DISTUPGRADE */ | |
| /* TARGETED is used in up/dup jobs to make the solver | |
| * treat the specified selection as target packages. | |
| * It is automatically assumed if the selection does not | |
| * contain an "installed" package unless the | |
| * NO_AUTOTARGET solver flag is set */ | |
| /* This (SOLVER_INSTALL) job was automatically added | |
| * and thus does not the add to the userinstalled packages */ | |
| /* legacy */ | |
| /* solver_get_decisionlist / solver_get_learnt flags */ | |
| extern Solver *solver_create(Pool *pool); | |
| extern void solver_free(Solver *solv); | |
| extern int solver_solve(Solver *solv, Queue *job); | |
| extern Transaction *solver_create_transaction(Solver *solv); | |
| extern int solver_set_flag(Solver *solv, int flag, int value); | |
| extern int solver_get_flag(Solver *solv, int flag); | |
| extern int solver_get_decisionlevel(Solver *solv, Id p); | |
| extern void solver_get_decisionqueue(Solver *solv, Queue *decisionq); | |
| extern int solver_get_lastdecisionblocklevel(Solver *solv); | |
| extern void solver_get_decisionblock(Solver *solv, int level, Queue *decisionq); | |
| extern void solver_get_orphaned(Solver *solv, Queue *orphanedq); | |
| extern void solver_get_recommendations(Solver *solv, Queue *recommendationsq, Queue *suggestionsq, int noselected); | |
| extern void solver_get_unneeded(Solver *solv, Queue *unneededq, int filtered); | |
| extern void solver_get_userinstalled(Solver *solv, Queue *q, int flags); | |
| extern void pool_add_userinstalled_jobs(Pool *pool, Queue *q, Queue *job, int flags); | |
| extern void solver_get_cleandeps(Solver *solv, Queue *cleandepsq); | |
| extern int solver_describe_decision(Solver *solv, Id p, Id *infop); | |
| extern void solver_get_decisionlist(Solver *solv, Id p, int flags, Queue *decisionlistq); | |
| extern void solver_get_decisionlist_multiple(Solver *solv, Queue *pq, int flags, Queue *decisionlistq); | |
| extern void solver_get_learnt(Solver *solv, Id id, int flags, Queue *q); | |
| extern void solver_decisionlist_solvables(Solver *solv, Queue *decisionlistq, int pos, Queue *q); | |
| extern int solver_decisionlist_merged(Solver *solv, Queue *decisionlistq, int pos); | |
| extern int solver_alternatives_count(Solver *solv); | |
| extern int solver_get_alternative(Solver *solv, Id alternative, Id *idp, Id *fromp, Id *chosenp, Queue *choices, int *levelp); | |
| extern int solver_alternativeinfo(Solver *solv, int type, Id id, Id from, Id *fromp, Id *top, Id *depp); | |
| extern void solver_calculate_multiversionmap(Pool *pool, Queue *job, Map *multiversionmap); | |
| extern void solver_calculate_noobsmap(Pool *pool, Queue *job, Map *multiversionmap); /* obsolete */ | |
| extern void solver_create_state_maps(Solver *solv, Map *installedmap, Map *conflictsmap); | |
| extern void solver_calc_duchanges(Solver *solv, DUChanges *mps, int nmps); | |
| extern int solver_calc_installsizechange(Solver *solv); | |
| extern void pool_job2solvables(Pool *pool, Queue *pkgs, Id how, Id what); | |
| extern int pool_isemptyupdatejob(Pool *pool, Id how, Id what); | |
| /* decisioninfo merging */ | |
| extern int solver_calc_decisioninfo_bits(Solver *solv, Id decision, int type, Id from, Id to, Id dep); | |
| extern int solver_merge_decisioninfo_bits(Solver *solv, int state1, int type1, Id from1, Id to1, Id dep1, int state2, int type2, Id from2, Id to2, Id dep2); | |
| extern const char *solver_select2str(Pool *pool, Id select, Id what); | |
| extern const char *pool_job2str(Pool *pool, Id how, Id what, Id flagmask); | |
| extern const char *solver_alternative2str(Solver *solv, int type, Id id, Id from); | |
| extern const char *solver_reason2str(Solver *solv, int reason); | |
| extern const char *solver_decisionreason2str(Solver *solv, Id decision, int reason, Id info); | |
| extern const char *solver_decisioninfo2str(Solver *solv, int bits, int type, Id from, Id to, Id dep); | |
| /* deprecated, use solver_allweakdepinfos/solver_weakdepinfo instead */ | |
| extern void solver_describe_weakdep_decision(Solver *solv, Id p, Queue *whyq); | |
| /* iterate over all literals of a rule */ | |
| /* XXX: this currently doesn't work correctly for SOLVER_SOLVABLE_REPO and | |
| SOLVER_SOLVABLE_ALL */ | |
| /* iterate over all packages selected by a job */ | |
| /* weird suse stuff */ | |
| extern void solver_trivial_installable(Solver *solv, Queue *pkgs, Queue *res); | |
| } | |
Xet Storage Details
- Size:
- 18.2 kB
- Xet hash:
- 7b7e5327283a0c0755f756f7f0b694423b950151241d199fce8e4490654542c0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.