rpm
4.5
|
#include "system.h"
#include "rpmio_internal.h"
#include <rpmcli.h>
#include <rpmmacro.h>
#include <envvar.h>
#include <ugid.h>
#include "rpmdb.h"
#include "rpmds.h"
#include "rpmfi.h"
#include "rpmte.h"
#include "rpmts.h"
#include "debug.h"
Go to the source code of this file.
Data Structures | |
struct | orderListIndex_s |
struct | badDeps_s |
Macros | |
#define | CACHE_DEPENDENCY_RESULT 1 |
#define | _RPMDB_INTERNAL /* XXX response cache needs dbiOpen et al. */ |
#define | _RPMEVR_INTERNAL |
#define | _RPMTE_INTERNAL |
#define | _RPMTS_INTERNAL |
#define | isAuto(_x) (1) |
Typedefs | |
typedef struct orderListIndex_s * | orderListIndex |
Functions | |
static int | intcmp (const void *a, const void *b) |
Compare removed package instances (qsort/bsearch). | |
static int | removePackage (rpmts ts, Header h, int dboffset, int *indexp, alKey depends) |
Add removed package instance to ordered transaction set. | |
static int | rpmHeadersIdentical (Header first, Header second) |
Are two headers identical? | |
static int | rpmtsAddUpgrades (rpmts ts, rpmte p, uint32_t hcolor, Header h) |
Add upgrade erasures to a transaction set. | |
static int | rpmtsAddObsoletes (rpmts ts, rpmte p, uint32_t hcolor) |
Add Obsoletes: erasures to a transaction set. | |
int | rpmtsAddInstallElement (rpmts ts, Header h, fnpyKey key, int upgrade, rpmRelocation relocs) |
Add package to be installed to transaction set. | |
int | rpmtsAddEraseElement (rpmts ts, Header h, int dboffset) |
Add package to be erased to transaction set. | |
static int | unsatisfiedDepend (rpmts ts, rpmds dep, int adding) |
Check dep for an unsatisfied dependency. | |
static int | checkPackageDeps (rpmts ts, const char *pkgNEVRA, rpmds requires, rpmds conflicts, rpmds dirnames, rpmds linktos, const char *depName, uint_32 tscolor, int adding) |
Check added requires/conflicts against against installed+added packages. | |
static int | checkPackageSet (rpmts ts, const char *depName, rpmdbMatchIterator mi, int adding) |
Check dependency against installed packages. | |
static int | checkDependentPackages (rpmts ts, const char *depName) |
Check to-be-erased dependencies against installed requires. | |
static int | checkDependentConflicts (rpmts ts, const char *depName) |
Check to-be-added dependencies against installed conflicts. | |
static void | freeBadDeps (void) |
static int | ignoreDep (const rpmts ts, const rpmte p, const rpmte q) |
Check for dependency relations to be ignored. | |
static void | markLoop (tsortInfo tsi, rpmte q) |
Recursively mark all nodes with their predecessors. | |
static const char * | identifyDepend (int_32 f) |
static const char * | zapRelation (rpmte q, rpmte p, int zap, int *nzaps, int msglvl) |
Find (and eliminate co-requisites) "q <- p" relation in dependency loop. | |
static int | addRelation (rpmts ts, rpmte p, unsigned char *selected, rpmds requires) |
Record next "q <- p" relation (i.e. | |
static int | orderListIndexCmp (const void *one, const void *two) |
Compare ordered list entries by index (qsort/bsearch). | |
static void | addQ (rpmte p, rpmte *qp, rpmte *rp, uint_32 prefcolor) |
Add element to list sorting by tsi_qcnt. | |
int | rpmtsOrder (rpmts ts) |
Determine package order in a transaction set according to dependencies. | |
int | rpmtsCheck (rpmts ts) |
Check that all dependencies can be resolved. | |
Variables | |
int | _cacheDependsRC = 1 |
const char * | rpmNAME = PACKAGE |
const char * | rpmEVR = VERSION |
int | rpmFLAGS = RPMSENSE_EQUAL |
static rpmTag | _upgrade_tag |
static rpmTag | _obsolete_tag |
static int | badDepsInitialized = 0 |
static struct badDeps_s * | badDeps = NULL |
static uint32_t | _autobits = 0xffffffff |
#define _RPMDB_INTERNAL /* XXX response cache needs dbiOpen et al. */ |
#define isAuto | ( | _x | ) | (1) |
Definition at line 2062 of file depends.c.
Referenced by rpmtsOrder().
typedef struct orderListIndex_s* orderListIndex |
Add element to list sorting by tsi_qcnt.
p | new element |
*qp | first element |
*rp | last element |
prefcolor | preferred color |
Definition at line 2004 of file depends.c.
References rpmteColor(), rpmteTSI(), rpmteType(), and TR_REMOVED.
Referenced by rpmtsOrder().
Record next "q <- p" relation (i.e.
"p" requires "q").
ts | transaction set |
p | predecessor (i.e. package that "Requires: q") |
selected | boolean package selected array |
requires | relation |
Definition at line 1871 of file depends.c.
References ignoreDep(), RPMAL_NOMATCH, rpmalSatisfiesDepend(), rpmdsIx(), rpmdsN(), rpmdsNSType(), rpmdsTagN(), RPMNS_TYPE_ACCESS, RPMNS_TYPE_CPUINFO, RPMNS_TYPE_DIGEST, RPMNS_TYPE_DISKSPACE, RPMNS_TYPE_ENVVAR, RPMNS_TYPE_GETCONF, RPMNS_TYPE_GNUPG, RPMNS_TYPE_GROUP, RPMNS_TYPE_MACRO, RPMNS_TYPE_MOUNTED, RPMNS_TYPE_RPMLIB, RPMNS_TYPE_RUNNING, RPMNS_TYPE_SONAME, RPMNS_TYPE_UNAME, RPMNS_TYPE_USER, rpmteAddedKey(), rpmteDepth(), rpmteSetDepth(), rpmteTSI(), rpmteType(), rpmtsiFree(), rpmtsiInit(), rpmtsiNext(), TR_ADDED, TR_REMOVED, and xcalloc().
Referenced by rpmtsOrder().
|
static |
Check to-be-added dependencies against installed conflicts.
ts | transaction set |
depName | conflicts name |
Definition at line 1592 of file depends.c.
References checkPackageSet(), RPMTAG_CONFLICTNAME, rpmtsGetRdb(), and rpmtsInitIterator().
Referenced by rpmtsCheck().
|
static |
Check to-be-erased dependencies against installed requires.
ts | transaction set |
depName | requires name |
Definition at line 1571 of file depends.c.
References checkPackageSet(), RPMTAG_REQUIRENAME, rpmtsGetRdb(), and rpmtsInitIterator().
Referenced by rpmtsCheck().
|
static |
Check added requires/conflicts against against installed+added packages.
ts | transaction set |
pkgNEVRA | package name-version-release.arch |
requires | Requires: dependencies (or NULL) |
conflicts | Conflicts: dependencies (or NULL) |
dirnames | Dirnames: dependencies (or NULL) |
linktos | Filelinktos: dependencies (or NULL) |
depName | dependency name to filter (or NULL) |
tscolor | color bits for transaction set (0 disables) |
adding | dependency is from added package set? |
Definition at line 1310 of file depends.c.
References rpmalAllSatisfiesDepend(), rpmdsColor(), rpmdsInit(), rpmdsN(), rpmdsNext(), rpmdsProblem(), rpmExpandNumeric(), rpmpsFree(), rpmtsProblems(), and unsatisfiedDepend().
Referenced by checkPackageSet(), and rpmtsCheck().
|
static |
Check dependency against installed packages.
Adding: check name/provides dep against each conflict match, Erasing: check name/provides/filename dep against each requiredby match.
ts | transaction set |
depName | dependency name |
mi | rpm database iterator |
adding | dependency is from added package set? |
Definition at line 1509 of file depends.c.
References _free(), _rpmds_nopromote, checkPackageDeps(), hGetNEVRA(), rpmdbFreeIterator(), rpmdbNextIterator(), rpmdbPruneIterator(), RPMDEPS_FLAG_NOCONFLICTS, RPMDEPS_FLAG_NOLINKTOS, RPMDEPS_FLAG_NOPARENTDIRS, RPMDEPS_FLAG_NOREQUIRES, rpmdsFree(), rpmdsNew(), rpmdsSetNoPromote(), RPMTAG_CONFLICTNAME, RPMTAG_DIRNAMES, RPMTAG_FILELINKTOS, RPMTAG_REQUIRENAME, rpmtsColor(), and rpmtsDFlags().
Referenced by checkDependentConflicts(), and checkDependentPackages().
|
static |
Definition at line 1655 of file depends.c.
References _free(), badDeps_s::pname, and badDeps_s::qname.
Referenced by rpmtsOrder().
|
inlinestatic |
Definition at line 1766 of file depends.c.
Referenced by zapRelation().
Check for dependency relations to be ignored.
ts | transaction set |
p | successor element (i.e. with Requires: ) |
q | predecessor element (i.e. with Provides: ) |
Definition at line 1678 of file depends.c.
References _, _free(), badDeps_s::pname, badDeps_s::qname, RPMDEPS_FLAG_ANACONDA, RPMDEPS_FLAG_DEPLOOPS, rpmExpand(), RPMMESS_DEBUG, RPMMESS_WARNING, rpmMessage, rpmteN(), rpmtsDFlags(), xcalloc(), and xstrdup().
Referenced by addRelation().
|
static |
Compare removed package instances (qsort/bsearch).
a | 1st instance address |
b | 2nd instance address |
Definition at line 73 of file depends.c.
Referenced by removePackage().
Recursively mark all nodes with their predecessors.
tsi | successor chain |
q | predecessor |
Definition at line 1740 of file depends.c.
References rpmteTSI().
Referenced by rpmtsOrder().
|
static |
Compare ordered list entries by index (qsort/bsearch).
one | 1st ordered list entry |
two | 2nd ordered list entry |
Definition at line 1986 of file depends.c.
Referenced by rpmtsOrder().
Add removed package instance to ordered transaction set.
ts | transaction set |
h | header |
dboffset | rpm database instance |
*indexp | removed element index (if not NULL) |
depends | installed package of pair (or RPMAL_NOMATCH on erase) |
Definition at line 91 of file depends.c.
References intcmp(), rpmteNew(), TR_REMOVED, and xrealloc().
Referenced by rpmtsAddEraseElement(), rpmtsAddObsoletes(), and rpmtsAddUpgrades().
Are two headers identical?
first | first header |
second | second header |
Definition at line 156 of file depends.c.
References headerGetEntry(), rpmdsCompare(), rpmdsFree(), rpmdsThis(), RPMSENSE_EQUAL, RPMTAG_HDRID, and RPMTAG_REQUIRENAME.
Referenced by rpmtsAddUpgrades().
Add Obsoletes: erasures to a transaction set.
ts | transaction set |
p | transaction element |
hcolor | header color |
Definition at line 386 of file depends.c.
References _free(), _obsolete_tag, _rpmds_nopromote, D_, hGetColor(), removePackage(), rpmdbFreeIterator(), rpmdbGetIteratorOffset(), rpmdbNextIterator(), rpmdbPruneIterator(), rpmdsAnyMatchesDep(), rpmdsColor(), rpmdsDNEVR(), rpmdsEVR(), rpmdsFree(), rpmdsInit(), rpmdsLink(), rpmdsN(), rpmdsNext(), rpmExpand(), rpmlog(), RPMLOG_DEBUG, RPMTAG_BASENAMES, RPMTAG_NAME, RPMTAG_OBSOLETENAME, RPMTAG_PROVIDENAME, rpmteAddedKey(), rpmteChain(), rpmteDS(), rpmteN(), rpmteNEVRA(), rpmtsColor(), and rpmtsInitIterator().
Referenced by rpmtsAddInstallElement().
Add upgrade erasures to a transaction set.
ts | transaction set |
p | transaction element |
hcolor | header color |
h | header |
Definition at line 201 of file depends.c.
References _free(), _upgrade_tag, alloca(), _HE_s::c, D_, hGetColor(), _HE_s::p, rpmDataType_u::ptr, removePackage(), rpmdbFreeIterator(), rpmdbGetIteratorOffset(), rpmdbNextIterator(), rpmExpand(), rpmHeadersIdentical(), rpmlog(), RPMLOG_DEBUG, RPMTAG_NAME, RPMTAG_ORIGINTID, RPMTAG_ORIGINTIME, RPMTAG_PROVIDENAME, rpmteAddedKey(), rpmteChain(), rpmteN(), rpmteNEVRA(), rpmtsColor(), rpmtsInitIterator(), _HE_s::tag, and rpmDataType_u::ui32p.
Referenced by rpmtsAddInstallElement().
Check dep for an unsatisfied dependency.
ts | transaction set |
dep | dependency |
adding | dependency is from added package set? |
Definition at line 741 of file depends.c.
References _, _cacheDependsRC, _free(), _rpmds_nopromote, alloca(), dbiOpen(), errno, Fclose(), Ferror(), Fopen(), Fread(), gidToGname(), gnameToGid(), PGPHASHALGO_MD5, R_OK, rpmalMakeIndex(), rpmalSatisfiesDepend(), rpmdbFreeIterator(), RPMDBI_DEPENDS, rpmdbNextIterator(), rpmdbPruneIterator(), RPMDEPS_FLAG_NOSUGGEST, RPMDIGEST_NONE, rpmDigestFinal(), rpmDigestInit(), rpmDigestUpdate(), rpmdsAnyMatchesDep(), rpmdsCpuinfo(), rpmdsDNEVR(), rpmdsELF(), rpmdsEVR(), rpmdsFlags(), rpmdsFree(), rpmdsFreePRCO(), rpmdsFromPRCO(), rpmdsGetconf(), rpmdsMergePRCO(), rpmdsN(), rpmdsNegateRC(), rpmdsNewPRCO(), rpmdsNotify(), rpmdsNSType(), rpmdsRpmlib(), rpmdsSearch(), rpmdsSingle(), rpmdsTagN(), rpmdsUname(), rpmExpand(), rpmExpandNumeric(), rpmGetPath(), rpmioAccess(), RPMNS_TYPE_ACCESS, RPMNS_TYPE_CPUINFO, RPMNS_TYPE_DIGEST, RPMNS_TYPE_DISKSPACE, RPMNS_TYPE_ENVVAR, RPMNS_TYPE_FUNCTION, RPMNS_TYPE_GETCONF, RPMNS_TYPE_GNUPG, RPMNS_TYPE_GROUP, RPMNS_TYPE_MACRO, RPMNS_TYPE_MOUNTED, RPMNS_TYPE_RPMLIB, RPMNS_TYPE_RUNNING, RPMNS_TYPE_SONAME, RPMNS_TYPE_UNAME, RPMNS_TYPE_USER, RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, RPMSENSE_NOTEQUAL, RPMSENSE_SENSEMASK, RPMTAG_BASENAMES, RPMTAG_DIRNAMES, RPMTAG_PROVIDENAME, rpmtsDFlags(), rpmtsGetRdb(), rpmtsInitDSI(), rpmtsInitIterator(), uidToUname(), unameToUid(), X_OK, and xisdigit().
Referenced by checkPackageDeps().
Find (and eliminate co-requisites) "q <- p" relation in dependency loop.
Search all successors of q for instance of p. Format the specific relation, (e.g. p contains "Requires: q"). Unlink and free co-requisite (i.e. pure Requires: dependencies) successor node(s).
q | sucessor (i.e. package required by p) |
p | predecessor (i.e. package that "Requires: q") |
zap | max. no. of co-requisites to remove (-1 is all)? |
nzaps | address of no. of relations removed |
msglvl | message level at which to spew |
Definition at line 1802 of file depends.c.
References _, _free(), identifyDepend(), rpmdsFlags(), rpmdsNewDNEVR(), rpmdsSetIx(), rpmMessage, rpmteDS(), rpmteNEVRA(), rpmteTSI(), rpmteType(), and TR_REMOVED.
Referenced by rpmtsOrder().
int _cacheDependsRC = 1 |
Definition at line 55 of file depends.c.
Referenced by rpmtsCheck(), and unsatisfiedDepend().
|
static |
Definition at line 191 of file depends.c.
Referenced by rpmtsAddObsoletes().
|
static |
Definition at line 185 of file depends.c.
Referenced by rpmtsAddUpgrades().
const char* rpmEVR = VERSION |
Definition at line 62 of file depends.c.
Referenced by printVersion().
int rpmFLAGS = RPMSENSE_EQUAL |