#include "system.h"#include <rpmcli.h>#include <rpmmacro.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 | 
Defines | |
| #define | _RPMTE_INTERNAL | 
| #define | _RPMTS_INTERNAL | 
Typedefs | |
| typedef 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, alKey depends) | 
| Add removed package instance to ordered 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, const char *depName, uint_32 tscolor, int adding) | 
| Check added requires/conflicts against against installed+added packages.   | |
| static int | checkPackageSet (rpmts ts, const char *dep, rpmdbMatchIterator mi, int adding) | 
| Check dependency against installed packages.   | |
| static int | checkDependentPackages (rpmts ts, const char *dep) | 
| Check to-be-erased dependencies against installed requires.   | |
| static int | checkDependentConflicts (rpmts ts, const char *dep) | 
| 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 *const | identifyDepend (int_32 f) | 
| static const char * | zapRelation (rpmte q, rpmte p, rpmds requires, 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 int | badDepsInitialized = 0 | 
| static struct badDeps_s * | badDeps = NULL | 
Definition in file depends.c.
| typedef struct orderListIndex_s* orderListIndex | 
Add element to list sorting by tsi_qcnt.
| p | new element | 
| qp | address of first element | |
| rp | address of last element | 
Definition at line 1161 of file depends.c.
References rpmteColor(), and rpmteTSI().
Referenced by rpmtsOrder().
| static int addRelation | ( | rpmts | ts, | |
| rpmte | p, | |||
| unsigned char * | selected, | |||
| rpmds | requires | |||
| ) |  [inline, static] | 
        
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 1056 of file depends.c.
References ignoreDep(), RPMAL_NOMATCH, rpmalSatisfiesDepend(), rpmdsIx(), rpmdsN(), rpmteAddedKey(), rpmteDepth(), rpmteSetDepth(), rpmteTSI(), rpmteType(), rpmtsiFree, rpmtsiInit, rpmtsiNext(), TR_REMOVED, and xcalloc().
Referenced by rpmtsOrder().
| static int checkDependentConflicts | ( | rpmts | ts, | |
| const char * | dep | |||
| ) |  [static] | 
        
Check to-be-added dependencies against installed conflicts.
| ts | transaction set | |
| dep | conflicts name | 
Definition at line 806 of file depends.c.
References checkPackageSet(), RPMTAG_CONFLICTNAME, rpmtsGetRdb(), and rpmtsInitIterator().
Referenced by rpmtsCheck().
| static int checkDependentPackages | ( | rpmts | ts, | |
| const char * | dep | |||
| ) |  [static] | 
        
Check to-be-erased dependencies against installed requires.
| ts | transaction set | |
| dep | requires name | 
Definition at line 791 of file depends.c.
References checkPackageSet(), RPMTAG_REQUIRENAME, and rpmtsInitIterator().
Referenced by rpmtsCheck().
| static int checkPackageDeps | ( | rpmts | ts, | |
| const char * | pkgNEVRA, | |||
| rpmds | requires, | |||
| rpmds | conflicts, | |||
| const char * | depName, | |||
| uint_32 | tscolor, | |||
| int | adding | |||
| ) |  [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) | |
| 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 649 of file depends.c.
References rpmalAllSatisfiesDepend(), rpmdsColor(), rpmdsInit(), rpmdsN(), rpmdsNext(), rpmdsProblem(), and unsatisfiedDepend().
Referenced by checkPackageSet(), and rpmtsCheck().
| static int checkPackageSet | ( | rpmts | ts, | |
| const char * | dep, | |||
| rpmdbMatchIterator | mi, | |||
| int | adding | |||
| ) |  [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 | |
| dep | dependency name | |
| mi | rpm database iterator | |
| adding | dependency is from added package set? | 
Definition at line 749 of file depends.c.
References _free(), _rpmds_nopromote, checkPackageDeps(), hGetNEVRA(), rpmdbFreeIterator(), rpmdbNextIterator(), rpmdbPruneIterator(), rpmdsFree(), rpmdsNew(), rpmdsSetNoPromote(), RPMTAG_CONFLICTNAME, and RPMTAG_REQUIRENAME.
Referenced by checkDependentConflicts(), and checkDependentPackages().
| static void freeBadDeps | ( | void | ) |  [static] | 
        
Definition at line 846 of file depends.c.
References _free(), badDeps, badDepsInitialized, badDeps_s::pname, and badDeps_s::qname.
Referenced by rpmtsOrder().
| static const char* const identifyDepend | ( | int_32 | f | ) |  [inline, static] | 
        
Definition at line 952 of file depends.c.
References _notpre, isLegacyPreReq, RPMSENSE_FIND_REQUIRES, RPMSENSE_SCRIPT_POST, RPMSENSE_SCRIPT_POSTUN, RPMSENSE_SCRIPT_PRE, RPMSENSE_SCRIPT_PREUN, and RPMSENSE_SCRIPT_VERIFY.
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 869 of file depends.c.
References _, _free(), badDeps, badDepsInitialized, badDeps_s::pname, badDeps_s::qname, rpmExpand(), RPMMESS_DEBUG, RPMMESS_WARNING, rpmMessage, rpmteN(), RPMTRANS_FLAG_ANACONDA, RPMTRANS_FLAG_DEPLOOPS, rpmtsFlags(), xcalloc(), and xstrdup().
Referenced by addRelation().
| static int intcmp | ( | const void * | a, | |
| const void * | b | |||
| ) |  [static] | 
        
Compare removed package instances (qsort/bsearch).
| a | 1st instance address | |
| b | 2nd instance address | 
Definition at line 62 of file depends.c.
Referenced by removePackage().
Recursively mark all nodes with their predecessors.
| tsi | successor chain | |
| q | predecessor | 
Definition at line 931 of file depends.c.
References rpmteTSI().
Referenced by rpmtsOrder().
| static int orderListIndexCmp | ( | const void * | one, | |
| const void * | two | |||
| ) |  [static] | 
        
Compare ordered list entries by index (qsort/bsearch).
| one | 1st ordered list entry | |
| two | 2nd ordered list entry | 
Definition at line 1144 of file depends.c.
Referenced by rpmtsOrder().
Add removed package instance to ordered transaction set.
| ts | transaction set | |
| h | header | |
| dboffset | rpm database instance | |
| depends | installed package of pair (or RPMAL_NOMATCH on erase) | 
Definition at line 79 of file depends.c.
References intcmp(), rpmteNew(), TR_REMOVED, and xrealloc().
Referenced by rpmtsAddEraseElement(), and rpmtsAddInstallElement().
Check dep for an unsatisfied dependency.
| ts | transaction set | |
| dep | dependency | |
| adding | dependency is from added package set? | 
Definition at line 405 of file depends.c.
References _, _cacheDependsRC, _rpmds_nopromote, alloca(), _dbiIndex::dbi_txnid, dbiCclose(), dbiCopen(), dbiGet(), dbiOpen(), dbiPut(), rpmalMakeIndex(), rpmalSatisfiesDepend(), rpmCheckRpmlibProvides(), rpmdbFreeIterator(), RPMDBI_DEPENDS, rpmdbNextIterator(), rpmdbPruneIterator(), rpmdsAnyMatchesDep(), rpmdsDNEVR(), rpmdsFlags(), rpmdsN(), rpmdsNotify(), rpmGetVar(), RPMSENSE_SENSEMASK, RPMTAG_BASENAMES, RPMTAG_NAME, RPMTAG_PROVIDENAME, RPMTRANS_FLAG_NOSUGGEST, rpmtsFlags(), rpmtsGetRdb(), rpmtsInitIterator(), RPMVAR_PROVIDES, and xisspace().
Referenced by checkPackageDeps().
| static const char* zapRelation | ( | rpmte | q, | |
| rpmte | p, | |||
| rpmds | requires, | |||
| int | zap, | |||
| int * | nzaps, | |||
| int | msglvl | |||
| ) |  [static] | 
        
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") | |
| requires | relation | |
| 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 989 of file depends.c.
References _, _free(), identifyDepend(), rpmdsFlags(), rpmdsNewDNEVR(), rpmdsSetIx(), rpmMessage, RPMSENSE_PREREQ, rpmteNEVRA(), and rpmteTSI().
Referenced by rpmtsOrder().
| int _cacheDependsRC = 1 | 
int badDepsInitialized = 0 [static]           | 
        
| const char* rpmEVR = VERSION | 
 1.5.2