#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include "transaction.h"
#include "solver.h"
#include "bitmap.h"
#include "pool.h"
#include "poolarch.h"
#include "evr.h"
#include "util.h"
Go to the source code of this file.
Classes | |
struct | _TransactionElement |
struct | _TransactionOrderdata |
struct | orderdata |
Defines | |
#define | TYPE_BROKEN (1<<0) |
#define | TYPE_CON (1<<1) |
#define | TYPE_REQ_P (1<<2) |
#define | TYPE_PREREQ_P (1<<3) |
#define | TYPE_REQ (1<<4) |
#define | TYPE_PREREQ (1<<5) |
#define | TYPE_CYCLETAIL (1<<16) |
#define | TYPE_CYCLEHEAD (1<<17) |
#define | EDGEDATA_BLOCK 127 |
Functions | |
static int | obsq_sortcmp (const void *ap, const void *bp, void *dp) |
void | transaction_all_obs_pkgs (Transaction *trans, Id p, Queue *pkgs) |
Id | transaction_obs_pkg (Transaction *trans, Id p) |
static Id | transaction_base_type (Transaction *trans, Id p) |
Id | transaction_type (Transaction *trans, Id p, int mode) |
static int | classify_cmp (const void *ap, const void *bp, void *dp) |
static int | classify_cmp_pkgs (const void *ap, const void *bp, void *dp) |
void | transaction_classify (Transaction *trans, int mode, Queue *classes) |
void | transaction_classify_pkgs (Transaction *trans, int mode, Id class, Id from, Id to, Queue *pkgs) |
static void | create_transaction_info (Transaction *trans, Queue *decisionq) |
void | transaction_calculate (Transaction *trans, Queue *decisionq, Map *noobsmap) |
int | transaction_installedresult (Transaction *trans, Queue *installedq) |
static void | transaction_create_installedmap (Transaction *trans, Map *installedmap) |
int | transaction_calc_installsizechange (Transaction *trans) |
void | transaction_calc_duchanges (Transaction *trans, DUChanges *mps, int nmps) |
void | transaction_init (Transaction *trans, Pool *pool) |
void | transaction_init_clone (Transaction *trans, Transaction *srctrans) |
void | transaction_free (Transaction *trans) |
void | transaction_free_orderdata (Transaction *trans) |
static int | addteedge (struct orderdata *od, int from, int to, int type) |
static int | addedge (struct orderdata *od, Id from, Id to, int type) |
static int | havechoice (struct orderdata *od, Id p, Id q1, Id q2) |
static int | havescripts (Pool *pool, Id solvid) |
static void | addsolvableedges (struct orderdata *od, Solvable *s) |
static void | breakcycle (struct orderdata *od, Id *cycle) |
static void | dump_tes (struct orderdata *od) |
static void | reachable (struct orderdata *od, Id i) |
static void | addcycleedges (struct orderdata *od, Id *cycle, Queue *todo) |
void | transaction_order (Transaction *trans, int flags) |
int | transaction_order_add_choices (Transaction *trans, Id chosen, Queue *choices) |
void | transaction_add_obsoleted (Transaction *trans) |
static void | transaction_check_pkg (Transaction *trans, Id tepkg, Id pkg, Map *ins, Map *seen, int onlyprereq, Id noconfpkg, int depth) |
void | transaction_check_order (Transaction *trans) |
#define TYPE_BROKEN (1<<0) |
Definition at line 777 of file transaction.c.
Referenced by addcycleedges(), addteedge(), breakcycle(), dump_tes(), reachable(), and transaction_order().
#define TYPE_CON (1<<1) |
#define TYPE_REQ_P (1<<2) |
#define TYPE_PREREQ_P (1<<3) |
#define TYPE_REQ (1<<4) |
Definition at line 783 of file transaction.c.
Referenced by addsolvableedges(), breakcycle(), and transaction_order().
#define TYPE_PREREQ (1<<5) |
#define TYPE_CYCLETAIL (1<<16) |
#define TYPE_CYCLEHEAD (1<<17) |
#define EDGEDATA_BLOCK 127 |
static int obsq_sortcmp | ( | const void * | ap, | |
const void * | bp, | |||
void * | dp | |||
) | [static] |
Definition at line 29 of file transaction.c.
References _Solvable::evr, evrcmp(), EVRCMP_COMPARE, id2str(), _Solvable::name, and _Pool::solvables.
Referenced by create_transaction_info(), and transaction_all_obs_pkgs().
void transaction_all_obs_pkgs | ( | Transaction * | trans, | |
Id | p, | |||
Queue * | pkgs | |||
) |
Definition at line 62 of file transaction.c.
References _Queue::count, _Queue::elements, _Pool::installed, obsq_sortcmp(), _Transaction::pool, queue_empty(), queue_push(), _Solvable::repo, sat_sort(), _Pool::solvables, _Repo::start, _Transaction::transaction_info, and _Transaction::transaction_installed.
Referenced by addedge(), dump_tes(), havechoice(), solver_printdecisions(), transaction_add_obsoleted(), transaction_obs_pkg(), and transaction_type().
Id transaction_obs_pkg | ( | Transaction * | trans, | |
Id | p | |||
) |
Definition at line 111 of file transaction.c.
References _Queue::count, _Queue::elements, _Pool::installed, _Transaction::pool, queue_free(), queue_init_buffer(), _Solvable::repo, _Pool::solvables, _Repo::start, transaction_all_obs_pkgs(), and _Transaction::transaction_installed.
Referenced by solver_printtransaction(), transaction_base_type(), transaction_classify(), transaction_classify_pkgs(), and transaction_type().
static Id transaction_base_type | ( | Transaction * | trans, | |
Id | p | |||
) | [static] |
Definition at line 138 of file transaction.c.
References _Solvable::evr, evrcmp(), EVRCMP_COMPARE, _Pool::installed, MAPTST, _Solvable::name, _Transaction::noobsmap, _Transaction::pool, _Solvable::repo, _Map::size, solvable_identical(), _Pool::solvables, SOLVER_TRANSACTION_CHANGE, SOLVER_TRANSACTION_CHANGED, SOLVER_TRANSACTION_DOWNGRADE, SOLVER_TRANSACTION_DOWNGRADED, SOLVER_TRANSACTION_ERASE, SOLVER_TRANSACTION_IGNORE, SOLVER_TRANSACTION_INSTALL, SOLVER_TRANSACTION_MULTIINSTALL, SOLVER_TRANSACTION_MULTIREINSTALL, SOLVER_TRANSACTION_OBSOLETED, SOLVER_TRANSACTION_OBSOLETES, SOLVER_TRANSACTION_REINSTALL, SOLVER_TRANSACTION_REINSTALLED, SOLVER_TRANSACTION_UPGRADE, SOLVER_TRANSACTION_UPGRADED, transaction_obs_pkg(), and _Transaction::transactsmap.
Referenced by transaction_type().
Id transaction_type | ( | Transaction * | trans, | |
Id | p, | |||
int | mode | |||
) |
Definition at line 201 of file transaction.c.
References _Queue::count, _Queue::elements, id2str(), _Pool::installed, _Solvable::name, _Transaction::pool, queue_free(), queue_init(), _Solvable::repo, _Pool::solvables, SOLVER_TRANSACTION_CHANGE, SOLVER_TRANSACTION_CHANGE_IS_REINSTALL, SOLVER_TRANSACTION_CHANGED, SOLVER_TRANSACTION_ERASE, SOLVER_TRANSACTION_IGNORE, SOLVER_TRANSACTION_INSTALL, SOLVER_TRANSACTION_MULTIINSTALL, SOLVER_TRANSACTION_MULTIREINSTALL, SOLVER_TRANSACTION_OBSOLETED, SOLVER_TRANSACTION_OBSOLETES, SOLVER_TRANSACTION_REINSTALL, SOLVER_TRANSACTION_REINSTALLED, SOLVER_TRANSACTION_RPM_ONLY, SOLVER_TRANSACTION_SHOW_ACTIVE, SOLVER_TRANSACTION_SHOW_ALL, SOLVER_TRANSACTION_SHOW_MULTIINSTALL, SOLVER_TRANSACTION_SHOW_OBSOLETES, transaction_all_obs_pkgs(), transaction_base_type(), and transaction_obs_pkg().
Referenced by solver_printdecisions(), transaction_classify(), and transaction_classify_pkgs().
static int classify_cmp | ( | const void * | ap, | |
const void * | bp, | |||
void * | dp | |||
) | [static] |
Definition at line 359 of file transaction.c.
References id2str(), and _Transaction::pool.
Referenced by transaction_classify().
static int classify_cmp_pkgs | ( | const void * | ap, | |
const void * | bp, | |||
void * | dp | |||
) | [static] |
Definition at line 380 of file transaction.c.
References _Solvable::evr, evrcmp(), EVRCMP_COMPARE, id2str(), _Solvable::name, _Transaction::pool, and _Pool::solvables.
Referenced by transaction_classify_pkgs().
void transaction_classify | ( | Transaction * | trans, | |
int | mode, | |||
Queue * | classes | |||
) |
Definition at line 402 of file transaction.c.
References _Solvable::arch, classify_cmp(), _Queue::count, _Queue::elements, _Pool::installed, _Transaction::pool, queue_empty(), queue_push(), queue_unshift(), _Solvable::repo, sat_sort(), _Pool::solvables, SOLVER_TRANSACTION_ARCHCHANGE, SOLVER_TRANSACTION_ERASE, SOLVER_TRANSACTION_MAXTYPE, SOLVER_TRANSACTION_MERGE_ARCHCHANGES, SOLVER_TRANSACTION_MERGE_VENDORCHANGES, SOLVER_TRANSACTION_VENDORCHANGE, _Transaction::steps, transaction_obs_pkg(), transaction_type(), and _Solvable::vendor.
Referenced by solver_printtransaction().
void transaction_classify_pkgs | ( | Transaction * | trans, | |
int | mode, | |||
Id | class, | |||
Id | from, | |||
Id | to, | |||
Queue * | pkgs | |||
) |
Definition at line 493 of file transaction.c.
References _Solvable::arch, classify_cmp_pkgs(), _Queue::count, _Queue::elements, _Pool::installed, _Transaction::pool, queue_empty(), queue_push(), _Solvable::repo, sat_sort(), _Pool::solvables, SOLVER_TRANSACTION_ARCHCHANGE, SOLVER_TRANSACTION_MAXTYPE, SOLVER_TRANSACTION_VENDORCHANGE, _Transaction::steps, transaction_obs_pkg(), transaction_type(), and _Solvable::vendor.
Referenced by solver_printtransaction().
static void create_transaction_info | ( | Transaction * | trans, | |
Queue * | decisionq | |||
) | [static] |
Definition at line 538 of file transaction.c.
References _Solvable::arch, _Queue::count, _Queue::elements, _Repo::end, _Solvable::evr, FOR_PROVIDES, _Repo::idarraydata, _Pool::implicitobsoleteusesprovides, _Pool::installed, MAPTST, _Solvable::name, _Transaction::noobsmap, _Solvable::obsoletes, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, obsq_sortcmp(), _Transaction::pool, pool_colormatch(), pool_match_nevr(), queue_empty(), queue_push(), _Solvable::repo, sat_calloc(), sat_free(), sat_sort(), _Map::size, _Pool::solvables, _Repo::start, SYSTEMSOLVABLE, _Transaction::transaction_info, _Transaction::transaction_installed, and _Transaction::transactsmap.
Referenced by transaction_calculate().
void transaction_calculate | ( | Transaction * | trans, | |
Queue * | decisionq, | |||
Map * | noobsmap | |||
) |
Definition at line 631 of file transaction.c.
References _Queue::count, create_transaction_info(), _Queue::elements, FOR_REPO_SOLVABLES, id2str(), _Pool::installed, map_init(), map_init_clone(), MAPCLR, MAPSET, MAPTST, _Solvable::name, _Transaction::noobsmap, _Pool::nsolvables, _Transaction::pool, queue_empty(), queue_push(), _Solvable::repo, _Map::size, _Pool::solvables, _Transaction::steps, SYSTEMSOLVABLE, and _Transaction::transactsmap.
Referenced by solver_solve().
int transaction_installedresult | ( | Transaction * | trans, | |
Queue * | installedq | |||
) |
Definition at line 689 of file transaction.c.
References _Queue::count, _Queue::elements, FOR_REPO_SOLVABLES, _Pool::installed, MAPTST, _Transaction::pool, queue_empty(), queue_push(), _Solvable::repo, _Pool::solvables, _Transaction::steps, and _Transaction::transactsmap.
static void transaction_create_installedmap | ( | Transaction * | trans, | |
Map * | installedmap | |||
) | [static] |
Definition at line 718 of file transaction.c.
References _Queue::count, _Queue::elements, FOR_REPO_SOLVABLES, _Pool::installed, map_init(), MAPSET, MAPTST, _Pool::nsolvables, _Transaction::pool, _Solvable::repo, _Pool::solvables, _Transaction::steps, and _Transaction::transactsmap.
Referenced by transaction_calc_duchanges(), and transaction_calc_installsizechange().
int transaction_calc_installsizechange | ( | Transaction * | trans | ) |
Definition at line 743 of file transaction.c.
References map_free(), _Transaction::pool, pool_calc_installsizechange(), and transaction_create_installedmap().
void transaction_calc_duchanges | ( | Transaction * | trans, | |
DUChanges * | mps, | |||
int | nmps | |||
) |
Definition at line 755 of file transaction.c.
References map_free(), _Transaction::pool, pool_calc_duchanges(), and transaction_create_installedmap().
void transaction_init | ( | Transaction * | trans, | |
Pool * | pool | |||
) |
Definition at line 792 of file transaction.c.
References _Transaction::pool.
Referenced by solver_create().
void transaction_init_clone | ( | Transaction * | trans, | |
Transaction * | srctrans | |||
) |
Definition at line 799 of file transaction.c.
References _Repo::end, _Pool::installed, _TransactionOrderdata::invedgedata, map_init_clone(), _TransactionOrderdata::ninvedgedata, _Transaction::noobsmap, _TransactionOrderdata::ntes, _Transaction::orderdata, _Transaction::pool, queue_init_clone(), sat_calloc(), sat_malloc2(), _Repo::start, _Transaction::steps, _TransactionOrderdata::tes, _Transaction::transaction_info, _Transaction::transaction_installed, and _Transaction::transactsmap.
void transaction_free | ( | Transaction * | trans | ) |
Definition at line 827 of file transaction.c.
References map_free(), _Transaction::noobsmap, queue_free(), sat_free(), _Transaction::steps, transaction_free_orderdata(), _Transaction::transaction_info, _Transaction::transaction_installed, and _Transaction::transactsmap.
Referenced by solver_free().
void transaction_free_orderdata | ( | Transaction * | trans | ) |
Definition at line 838 of file transaction.c.
References _TransactionOrderdata::invedgedata, _Transaction::orderdata, sat_free(), and _TransactionOrderdata::tes.
Referenced by transaction_free().
static int addteedge | ( | struct orderdata * | od, | |
int | from, | |||
int | to, | |||
int | type | |||
) | [static] |
Definition at line 863 of file transaction.c.
References orderdata::edgedata, EDGEDATA_BLOCK, _TransactionElement::edges, orderdata::nedgedata, sat_extend(), orderdata::tes, and TYPE_BROKEN.
Referenced by addcycleedges(), and addedge().
Definition at line 909 of file transaction.c.
References addteedge(), _Queue::count, _Queue::elements, _Pool::installed, orderdata::ntes, _TransactionElement::p, _Transaction::pool, queue_free(), queue_init_buffer(), _Solvable::repo, _Pool::solvables, _Repo::start, orderdata::tes, orderdata::trans, transaction_all_obs_pkgs(), and _Transaction::transaction_installed.
Referenced by addsolvableedges().
Definition at line 978 of file transaction.c.
References _Queue::count, _Queue::elements, _Pool::installed, _Transaction::pool, queue_free(), queue_init_buffer(), _Repo::start, orderdata::trans, transaction_all_obs_pkgs(), and _Transaction::transaction_installed.
Referenced by addchoicerules(), and addsolvableedges().
Definition at line 1019 of file transaction.c.
References id2str(), _Repo::idarraydata, _Solvable::repo, _Solvable::requires, and _Pool::solvables.
Referenced by addsolvableedges(), breakcycle(), and transaction_check_order().
Definition at line 1046 of file transaction.c.
References addedge(), _Solvable::conflicts, _Queue::count, dep2str(), _Queue::elements, FOR_PROVIDES, havechoice(), havescripts(), _Repo::idarraydata, _Pool::installed, MAPTST, _Solvable::name, _TransactionElement::p, _Transaction::pool, queue_empty(), queue_free(), queue_init(), queue_pushunique(), _Solvable::repo, _Solvable::requires, solvable2str(), solvable_lookup_idarray(), _Pool::solvables, solvid2str(), _Repo::start, orderdata::trans, _Transaction::transaction_installed, _Transaction::transactsmap, TYPE_CON, TYPE_PREREQ, TYPE_PREREQ_P, TYPE_REQ, and TYPE_REQ_P.
Referenced by transaction_order().
Definition at line 1285 of file transaction.c.
References _Queue::count, orderdata::cycles, orderdata::cyclesdata, orderdata::edgedata, havescripts(), orderdata::ncycles, _TransactionElement::p, _Transaction::pool, POOL_DEBUG, queue_push(), SAT_DEBUG_STATS, solvid2str(), orderdata::tes, orderdata::trans, TYPE_BROKEN, TYPE_PREREQ, and TYPE_REQ.
Referenced by transaction_order().
static void dump_tes | ( | struct orderdata * | od | ) | [inline, static] |
Definition at line 1358 of file transaction.c.
References _Queue::count, orderdata::edgedata, _TransactionElement::edges, _Queue::elements, _Pool::installed, _TransactionElement::p, _Transaction::pool, POOL_DEBUG, queue_empty(), queue_init(), _Solvable::repo, SAT_DEBUG_RESULT, solvable2str(), _Pool::solvables, solvid2str(), orderdata::tes, orderdata::trans, transaction_all_obs_pkgs(), and TYPE_BROKEN.
Referenced by transaction_order().
Definition at line 1390 of file transaction.c.
References orderdata::edgedata, _TransactionElement::edges, _TransactionElement::mark, orderdata::tes, and TYPE_BROKEN.
Referenced by addcycleedges().
Definition at line 1415 of file transaction.c.
References addteedge(), _Queue::count, orderdata::edgedata, _TransactionElement::edges, _TransactionElement::mark, _TransactionElement::p, _Transaction::pool, queue_empty(), queue_pop(), queue_push(), reachable(), solvid2str(), orderdata::tes, orderdata::trans, TYPE_BROKEN, TYPE_CYCLEHEAD, and TYPE_CYCLETAIL.
Referenced by transaction_order().
void transaction_order | ( | Transaction * | trans, | |
int | flags | |||
) |
Definition at line 1536 of file transaction.c.
References addcycleedges(), addsolvableedges(), breakcycle(), _Queue::count, orderdata::cycles, orderdata::cyclesdata, dump_tes(), orderdata::edgedata, EDGEDATA_BLOCK, _TransactionElement::edges, _Queue::elements, _Pool::installed, orderdata::invedgedata, _TransactionOrderdata::invedgedata, _TransactionElement::mark, orderdata::ncycles, orderdata::nedgedata, _TransactionOrderdata::ninvedgedata, _TransactionOrderdata::ntes, orderdata::ntes, _Transaction::orderdata, _TransactionElement::p, _Transaction::pool, POOL_DEBUG, queue_empty(), queue_free(), queue_init(), queue_pop(), queue_push(), queue_shift(), _Solvable::repo, sat_calloc(), SAT_DEBUG_STATS, sat_extend(), sat_free(), sat_timems(), solvable_lookup_num(), _Pool::solvables, SOLVER_TRANSACTION_KEEP_ORDERDATA, solvid2str(), _Repo::start, _Transaction::steps, orderdata::tes, _TransactionOrderdata::tes, orderdata::trans, transaction_add_obsoleted(), _Transaction::transaction_installed, TYPE_BROKEN, and TYPE_REQ.
int transaction_order_add_choices | ( | Transaction * | trans, | |
Id | chosen, | |||
Queue * | choices | |||
) |
Definition at line 1883 of file transaction.c.
References _Queue::count, _TransactionElement::edges, _TransactionOrderdata::invedgedata, _TransactionElement::mark, _TransactionOrderdata::ntes, _Transaction::orderdata, _TransactionElement::p, queue_push(), and _TransactionOrderdata::tes.
void transaction_add_obsoleted | ( | Transaction * | trans | ) |
Definition at line 1927 of file transaction.c.
References _Queue::count, _Queue::elements, _Repo::end, FOR_REPO_SOLVABLES, _Pool::installed, map_free(), map_init(), MAPSET, MAPTST, _TransactionElement::p, _Transaction::pool, queue_empty(), queue_free(), queue_init(), queue_insertn(), queue_truncate(), _Solvable::repo, _Pool::solvables, _Repo::start, _Transaction::steps, transaction_all_obs_pkgs(), _Transaction::transaction_installed, and _Transaction::transactsmap.
Referenced by transaction_order().
static void transaction_check_pkg | ( | Transaction * | trans, | |
Id | tepkg, | |||
Id | pkg, | |||
Map * | ins, | |||
Map * | seen, | |||
int | onlyprereq, | |||
Id | noconfpkg, | |||
int | depth | |||
) | [static] |
Definition at line 1984 of file transaction.c.
References dep2str(), FOR_PROVIDES, id2str(), _Repo::idarraydata, _Pool::installed, MAPSET, MAPTST, _TransactionElement::p, _Transaction::pool, POOL_DEBUG, _Solvable::repo, _Solvable::requires, SAT_DEBUG_RESULT, solvable2str(), _Pool::solvables, solvid2str(), and _Transaction::transactsmap.
Referenced by transaction_check_order().
void transaction_check_order | ( | Transaction * | trans | ) |
Definition at line 2056 of file transaction.c.
References _Queue::count, _Queue::elements, FOR_REPO_SOLVABLES, havescripts(), _Pool::installed, map_free(), map_init(), MAPCLR, MAPSET, MAPZERO, _Pool::nsolvables, _TransactionElement::p, _Transaction::pool, POOL_DEBUG, _Solvable::repo, SAT_WARN, _Pool::solvables, _Transaction::steps, and transaction_check_pkg().