Files | |
file | depends.h |
Structures used for dependency checking. | |
file | psm.c |
Package state machine to handle a package from a transaction set. | |
file | psm.h |
Package state machine to handle a package from a transaction set. | |
file | rpmlib.h |
file | rpmvercmp.c |
file | transaction.c |
file | fprint.h |
Identify a file name path by a unique "finger print". | |
RPMTS | |
typedef psm_s * | PSM_t |
Package state machine data. | |
typedef transactionFileInfo_s * | TFI_t |
typedef rpmTransactionSet_s * | rpmTransactionSet |
The RPM Transaction Set. | |
typedef enum rpmtransFlags_e | rpmtransFlags |
Bit(s) to control rpmRunTransactions() operation. | |
enum | rpmtransFlags_e { RPMTRANS_FLAG_NONE = 0, RPMTRANS_FLAG_TEST = (1 << 0), RPMTRANS_FLAG_BUILD_PROBS = (1 << 1), RPMTRANS_FLAG_NOSCRIPTS = (1 << 2), RPMTRANS_FLAG_JUSTDB = (1 << 3), RPMTRANS_FLAG_NOTRIGGERS = (1 << 4), RPMTRANS_FLAG_NODOCS = (1 << 5), RPMTRANS_FLAG_ALLFILES = (1 << 6), RPMTRANS_FLAG_KEEPOBSOLETE = (1 << 7), RPMTRANS_FLAG_MULTILIB = (1 << 8), RPMTRANS_FLAG_DIRSTASH = (1 << 9), RPMTRANS_FLAG_REPACKAGE = (1 << 10), RPMTRANS_FLAG_PKGCOMMIT = (1 << 11), RPMTRANS_FLAG_PKGUNDO = (1 << 12), RPMTRANS_FLAG_COMMIT = (1 << 13), RPMTRANS_FLAG_UNDO = (1 << 14), RPMTRANS_FLAG_REVERSE = (1 << 15), RPMTRANS_FLAG_NOTRIGGERPREIN = (1 << 16), RPMTRANS_FLAG_NOPRE = (1 << 17), RPMTRANS_FLAG_NOPOST = (1 << 18), RPMTRANS_FLAG_NOTRIGGERIN = (1 << 19), RPMTRANS_FLAG_NOTRIGGERUN = (1 << 20), RPMTRANS_FLAG_NOPREUN = (1 << 21), RPMTRANS_FLAG_NOPOSTUN = (1 << 22), RPMTRANS_FLAG_NOTRIGGERPOSTUN = (1 << 23), RPMTRANS_FLAG_NOPAYLOAD = (1 << 24), RPMTRANS_FLAG_APPLYONLY = (1 << 25), RPMTRANS_FLAG_CHAINSAW = (1 << 26), RPMTRANS_FLAG_NOMD5 = (1 << 27) } |
Bit(s) to control rpmRunTransactions() operation. More... | |
rpmTransactionSet | rpmtransCreateSet (rpmdb rpmdb, const char *rootDir) |
Create an empty transaction set. | |
int | rpmtransAddPackage (rpmTransactionSet ts, Header h, FD_t fd, const void *key, int upgrade, rpmRelocation *relocs) |
Add package to be installed to unordered transaction set. | |
void | rpmtransAvailablePackage (rpmTransactionSet ts, Header h, const void *key) |
Add package to universe of possible packages to install in transaction set. | |
int | rpmtransRemovePackage (rpmTransactionSet ts, int dboffset) |
Add package to be removed to unordered transaction set. | |
rpmTransactionSet | rpmtransFree (rpmTransactionSet ts) |
Destroy transaction set. | |
void | rpmtransSetScriptFd (rpmTransactionSet ts, FD_t fd) |
Save file handle to be used as stderr when running package scripts. | |
int | rpmtransGetKeys (const rpmTransactionSet ts, const void ***ep, int *nep) |
Retrieve keys from ordered transaction set. | |
int | rpmdepCheck (rpmTransactionSet ts, rpmDependencyConflict *conflicts, int *numConflicts) |
Check that all dependencies can be resolved. | |
int | rpmdepOrder (rpmTransactionSet ts) |
Determine package order in a transaction set according to dependencies. | |
rpmDependencyConflict | rpmdepFreeConflicts (rpmDependencyConflict conflicts, int numConflicts) |
Destroy dependency conflicts storage. | |
int | rpmGetRpmlibProvides (const char ***provNames, int **provFlags, const char ***provVersions) |
Return copy of rpmlib internal provides. | |
int | rpmvercmp (const char *a, const char *b) |
Segmented string compare for version and/or release. | |
int | rpmRangesOverlap (const char *AName, const char *AEVR, int AFlags, const char *BName, const char *BEVR, int BFlags) |
Compare two versioned dependency ranges, looking for overlap. | |
int | rpmCheckRpmlibProvides (const char *keyName, const char *keyEVR, int keyFlags) |
Check dependency against internal rpmlib feature provides. | |
int | rpmRunTransactions (rpmTransactionSet ts, rpmCallbackFunction notify, rpmCallbackData notifyData, rpmProblemSet okProbs, rpmProblemSet *newProbs, rpmtransFlags transFlags, rpmprobFilterFlags ignoreSet) |
Process all packages in transaction set. |
typedef struct rpmTransactionSet_s* rpmTransactionSet |
typedef enum rpmtransFlags_e rpmtransFlags |
Bit(s) to control rpmRunTransactions() operation.
typedef struct transactionFileInfo_s* TFI_t |
enum rpmtransFlags_e |
Bit(s) to control rpmRunTransactions() operation.
RPMTRANS_FLAG_NONE | |
RPMTRANS_FLAG_TEST | from --test |
RPMTRANS_FLAG_BUILD_PROBS |
|
RPMTRANS_FLAG_NOSCRIPTS | from --noscripts |
RPMTRANS_FLAG_JUSTDB | from --justdb |
RPMTRANS_FLAG_NOTRIGGERS | from --notriggers |
RPMTRANS_FLAG_NODOCS | from --excludedocs |
RPMTRANS_FLAG_ALLFILES | from --allfiles |
RPMTRANS_FLAG_KEEPOBSOLETE |
|
RPMTRANS_FLAG_MULTILIB |
|
RPMTRANS_FLAG_DIRSTASH | from --dirstash |
RPMTRANS_FLAG_REPACKAGE | from --repackage |
RPMTRANS_FLAG_PKGCOMMIT | |
RPMTRANS_FLAG_PKGUNDO | |
RPMTRANS_FLAG_COMMIT | |
RPMTRANS_FLAG_UNDO | |
RPMTRANS_FLAG_REVERSE | |
RPMTRANS_FLAG_NOTRIGGERPREIN | from --notriggerprein |
RPMTRANS_FLAG_NOPRE | from --nopre |
RPMTRANS_FLAG_NOPOST | from --nopost |
RPMTRANS_FLAG_NOTRIGGERIN | from --notriggerin |
RPMTRANS_FLAG_NOTRIGGERUN | from --notriggerun |
RPMTRANS_FLAG_NOPREUN | from --nopreun |
RPMTRANS_FLAG_NOPOSTUN | from --nopostun |
RPMTRANS_FLAG_NOTRIGGERPOSTUN | from --notriggerpostun |
RPMTRANS_FLAG_NOPAYLOAD | |
RPMTRANS_FLAG_APPLYONLY | |
RPMTRANS_FLAG_CHAINSAW | |
RPMTRANS_FLAG_NOMD5 | from --nomd5 |
int rpmCheckRpmlibProvides | ( | const char * | keyName, | |
const char * | keyEVR, | |||
int | keyFlags | |||
) |
Check dependency against internal rpmlib feature provides.
keyName | dependency name string | |
keyEVR | dependency [epoch:]version[-release] string | |
keyFlags | dependency logical range qualifiers |
Definition at line 57 of file rpmlibprov.c.
References rpmlibProvides_s::featureEVR, rpmlibProvides_s::featureFlags, rpmlibProvides_s::featureName, rpmlibProvides, and rpmRangesOverlap().
Referenced by unsatisfiedDepend().
int rpmdepCheck | ( | rpmTransactionSet | ts, | |
rpmDependencyConflict * | conflicts, | |||
int * | numConflicts | |||
) |
Check that all dependencies can be resolved.
ts | transaction set |
conflicts | dependency problems | |
numConflicts | no. of dependency problems |
Definition at line 2256 of file depends.c.
References _free(), rpmTransactionSet_s::addedPackages, alMakeIndex(), rpmTransactionSet_s::availablePackages, availablePackage::baseNames, checkDependentConflicts(), checkDependentPackages(), checkPackageDeps(), availablePackage::h, headerFreeData(), headerGetEntryMinMemory(), headerNVR(), availableList_s::list, availablePackage::multiLib, availablePackage::name, rpmTransactionSet_s::numRemovedPackages, availablePackage::provides, availablePackage::providesCount, availablePackage::release, rpmTransactionSet_s::removedPackages, rpmTransactionSet_s::rpmdb, rpmdbAppendIterator(), rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbInitIterator(), rpmdbNextIterator(), rpmMessage, RPMTAG_BASENAMES, RPMTAG_DIRINDEXES, RPMTAG_DIRNAMES, RPMTAG_PROVIDENAME, availableList_s::size, stpcpy(), availablePackage::version, xcalloc(), and xrealloc().
Referenced by checkSpec(), rpmErase(), rpmInstall(), rpmRollback(), rpmtransDepCheck(), and verifyDependencies().
rpmDependencyConflict rpmdepFreeConflicts | ( | rpmDependencyConflict | conflicts, | |
int | numConflicts | |||
) |
Destroy dependency conflicts storage.
conflicts | dependency problems | |
numConflicts | no. of dependency problems NULL always |
Definition at line 936 of file depends.c.
References _free(), rpmDependencyConflict_s::byName, rpmDependencyConflict_s::byRelease, rpmDependencyConflict_s::byVersion, headerFree(), rpmDependencyConflict_s::needsName, rpmDependencyConflict_s::needsVersion, and rpmDependencyConflict_s::suggestedPackages.
Referenced by checkSpec(), rpmErase(), rpmInstall(), rpmRollback(), rpmtransDepCheck(), and verifyDependencies().
int rpmdepOrder | ( | rpmTransactionSet | ts | ) |
Determine package order in a transaction set according to dependencies.
Order packages, returning error if circular dependencies cannot be eliminated by removing PreReq's from the loop(s). Only dependencies from added or removed packages are used to determine ordering using a topological sort (Knuth vol. 1, p. 262). Use rpmdepCheck() to verify that all dependencies can be resolved.
The final order ends up as installed packages followed by removed packages, with packages removed for upgrades immediately following the new package to be installed.
The operation would be easier if we could sort the addedPackages array in the transaction set, but we store indexes into the array in various places.
ts | transaction set |
Definition at line 1914 of file depends.c.
References _, _free(), rpmTransactionSet_s::addedPackages, addQ(), addRelation(), alloca(), alMakeIndex(), rpmTransactionSet_s::availablePackages, availablePackage::degree, availablePackage::depth, isErasePreReq, isInstallPreReq, isLegacyPreReq, availableList_s::list, availablePackage::name, availablePackage::npreds, availablePackage::parent, availablePackage::release, availablePackage::requireFlags, availablePackage::requiresCount, RPMMESS_DEBUG, rpmMessage, RPMTRANS_FLAG_CHAINSAW, availableList_s::size, rpmTransactionSet_s::transFlags, availablePackage::tree, availablePackage::tsi, tsortInfo_s::tsi_next, tsortInfo_s::tsi_qcnt, tsortInfo_s::tsi_reqx, and availablePackage::version.
Referenced by rpmInstall(), rpmRollback(), and rpmtransOrder().
int rpmGetRpmlibProvides | ( | const char *** | provNames, | |
int ** | provFlags, | |||
const char *** | provVersions | |||
) |
Return copy of rpmlib internal provides.
address | of array of rpmlib internal provide names | |
address | of array of rpmlib internal provide flags | |
address | of array of rpmlib internal provide versions |
Definition at line 73 of file rpmlibprov.c.
References _free(), rpmlibProvides_s::featureEVR, rpmlibProvides_s::featureFlags, rpmlibProvides_s::featureName, rpmlibProvides, and xcalloc().
int rpmRangesOverlap | ( | const char * | AName, | |
const char * | AEVR, | |||
int | AFlags, | |||
const char * | BName, | |||
const char * | BEVR, | |||
int | BFlags | |||
) |
Compare two versioned dependency ranges, looking for overlap.
AName | 1st dependncy name string | |
AEVR | 1st dependency [epoch:]version[-release] string | |
AFlags | 1st dependency logical range qualifiers | |
BName | 2nd dependncy name string | |
BEVR | 2nd dependency [epoch:]version[-release] string | |
BFlags | 2nd dependency logical range qualifiers |
Definition at line 529 of file depends.c.
References _, _free(), parseEVR(), printDepend(), RPMMESS_DEBUG, rpmMessage, RPMSENSE_EQUAL, RPMSENSE_GREATER, RPMSENSE_LESS, RPMSENSE_SENSEMASK, rpmvercmp(), and xstrdup().
Referenced by alAllSatisfiesDepend(), headerMatchesDepFlags(), rangeMatchesDepFlags(), and rpmCheckRpmlibProvides().
int rpmRunTransactions | ( | rpmTransactionSet | ts, | |
rpmCallbackFunction | notify, | |||
rpmCallbackData | notifyData, | |||
rpmProblemSet | okProbs, | |||
rpmProblemSet * | newProbs, | |||
rpmtransFlags | transFlags, | |||
rpmprobFilterFlags | ignoreSet | |||
) |
Process all packages in transaction set.
ts | transaction set | |
notify | progress callback | |
notifyData | progress callback private data | |
okProbs | previously known problems (or NULL) |
newProbs | address to return unfiltered problems (or NULL) |
transFlags | bits to control rpmRunTransactions() | |
ignoreSet | bits to filter problem types |
Definition at line 1516 of file transaction.c.
References _free(), _noTransScripts, _noTransTriggers, transactionFileInfo_s::actions, transactionElement_s::addedIndex, rpmTransactionSet_s::addedPackages, transactionFileInfo_s::ap, archOkay(), diskspaceInfo::bavail, diskspaceInfo::bneeded, transactionFileInfo_s::bnl, diskspaceInfo::bsize, rpmTransactionSet_s::chrootDone, rpmTransactionSet_s::currDir, currentDirectory(), dbiFreeIndexSet(), dbiIndexRecordFileNumber(), dbiIndexRecordOffset(), dbiIndexSetCount(), diskspaceInfo::dev, rpmTransactionSet_s::di, transactionFileInfo_s::dil, transactionFileInfo_s::dnl, ensureOlder(), transactionFileInfo_s::fc, availablePackage::filesCount, rpmTransactionSet_s::filesystemCount, rpmTransactionSet_s::filesystems, rpmTransactionSet_s::flEntries, rpmTransactionSet_s::flList, fpCacheCreate(), fpEqual(), fpHashFunction(), fpLookupList(), transactionFileInfo_s::fps, availablePackage::h, transactionFileInfo_s::h, handleInstInstalledFiles(), handleRmvdInstalledFiles(), headerFree(), headerGetEntry(), headerLink(), htAddEntry(), htCreate(), diskspaceInfo::iavail, rpmTransactionSet_s::id, rpmTransactionSet_s::ignoreSet, diskspaceInfo::ineeded, sharedFileInfo::isRemoved, availableList_s::list, loadFi(), transactionFileInfo_s::magic, availablePackage::multiLib, availablePackage::name, rpmTransactionSet_s::notify, NOTIFY, rpmTransactionSet_s::notifyData, rpmTransactionSet_s::numRemovedPackages, rpmTransactionSet_s::order, rpmTransactionSet_s::orderCount, osOkay(), sharedFileInfo::otherFileNum, sharedFileInfo::otherPkg, sharedFileInfo::pkgFileNum, rpmTransactionSet_s::probs, psAppend(), psCreate(), transactionFileInfo_s::record, availablePackage::release, relocateFileList(), transactionElement_s::removed, rpmTransactionSet_s::removedPackages, rpmTransactionSet_s::rootDir, RPMCALLBACK_TRANS_PROGRESS, RPMCALLBACK_TRANS_START, rpmTransactionSet_s::rpmdb, rpmdbAppendIterator(), rpmdbFindFpList(), rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbInitIterator(), rpmdbNextIterator(), rpmdbSetIteratorRE(), rpmGetFilesystemList(), RPMMIRE_DEFAULT, RPMPROB_BADARCH, RPMPROB_BADOS, RPMPROB_FILTER_DISKSPACE, RPMPROB_FILTER_IGNOREARCH, RPMPROB_FILTER_IGNOREOS, RPMPROB_FILTER_OLDPACKAGE, RPMPROB_FILTER_REPLACEOLDFILES, RPMPROB_FILTER_REPLACEPKG, RPMPROB_PKG_INSTALLED, RPMTAG_BASENAMES, RPMTAG_NAME, RPMTAG_RELEASE, RPMTAG_VERSION, RPMTRANS_FLAG_JUSTDB, RPMTRANS_FLAG_MULTILIB, RPMTRANS_FLAG_NOSCRIPTS, RPMTRANS_FLAG_NOTRIGGERS, sharedCmp(), availableList_s::size, skipFiles(), STATFS_IN_SYS_STATVFS, TFIMAGIC, rpmTransactionSet_s::transFlags, psm_s::ts, tsFreeIterator(), tsGetAlp(), tsGetOc(), tsInitIterator(), tsNextIterator(), transactionFileInfo_s::type, transactionElement_s::type, transactionElement_s::u, availablePackage::version, xcalloc(), XFA_SKIPPING, and xmalloc().
Referenced by rpmErase(), rpmInstall(), rpmRollback(), and rpmtransRun().
int rpmtransAddPackage | ( | rpmTransactionSet | ts, | |
Header | h, | |||
FD_t | fd, | |||
const void * | key, | |||
int | upgrade, | |||
rpmRelocation * | relocs | |||
) |
Add package to be installed to unordered transaction set.
If fd is NULL, the callback specified in rpmtransCreateSet() is used to open and close the file descriptor. If Header is NULL, the fd is always used, otherwise fd is only needed (and only opened) for actual package installation.
ts | transaction set | |
h | package header | |
fd | package file handle | |
key | package private data | |
upgrade | is package being upgraded? | |
relocs | package file relocations |
Definition at line 797 of file depends.c.
References transactionElement_s::addedIndex, rpmTransactionSet_s::addedPackages, alAddPackage(), rpmTransactionSet_s::delta, headerFreeData(), headerGetEntryMinMemory(), headerIsEntry(), headerMatchesDepFlags(), headerNVR(), availableList_s::list, name, rpmTransactionSet_s::numRemovedPackages, rpmTransactionSet_s::order, rpmTransactionSet_s::orderAlloced, rpmTransactionSet_s::orderCount, rpmTransactionSet_s::removedPackages, removePackage(), rpmTransactionSet_s::rpmdb, rpmdbFreeIterator(), rpmdbGetIteratorOffset(), rpmdbInitIterator(), rpmdbNextIterator(), rpmdbPruneIterator(), RPMTAG_MULTILIBS, RPMTAG_NAME, RPMTAG_OBSOLETEFLAGS, RPMTAG_OBSOLETENAME, RPMTAG_OBSOLETEVERSION, RPMTAG_SOURCEPACKAGE, rpmVersionCompare(), transactionElement_s::type, transactionElement_s::u, and xrealloc().
Referenced by checkSpec(), rpmInstall(), rpmInstallSourcePackage(), rpmRollback(), rpmtransAdd(), and verifyDependencies().
void rpmtransAvailablePackage | ( | rpmTransactionSet | ts, | |
Header | h, | |||
const void * | key | |||
) |
Add package to universe of possible packages to install in transaction set.
ts | transaction set | |
h | header | |
key | package private data |
Definition at line 906 of file depends.c.
References alAddPackage(), rpmTransactionSet_s::availablePackages, and availablePackage::h.
Referenced by rpmtransAdd().
rpmTransactionSet rpmtransCreateSet | ( | rpmdb | rpmdb, | |
const char * | rootDir | |||
) |
Create an empty transaction set.
rpmdb | rpm database (may be NULL if database is not accessed) | |
rootdir | path to top of install tree |
Definition at line 692 of file depends.c.
References alCreate(), alloca(), stpcpy(), xcalloc(), and xstrdup().
Referenced by checkSpec(), cpio_doio(), rpmErase(), rpmInstall(), rpmInstallSourcePackage(), rpmRollback(), rpmtransCreate(), rpmVerifyScript(), and verifyDependencies().
rpmTransactionSet rpmtransFree | ( | rpmTransactionSet | ts | ) |
Destroy transaction set.
ts | transaction set |
Definition at line 917 of file depends.c.
References _free(), rpmTransactionSet_s::addedPackages, alFree(), rpmTransactionSet_s::availablePackages, rpmTransactionSet_s::currDir, rpmTransactionSet_s::di, fdFree, rpmTransactionSet_s::order, rpmTransactionSet_s::removedPackages, rpmTransactionSet_s::rootDir, and rpmTransactionSet_s::scriptFd.
Referenced by checkSpec(), cpio_doio(), rpmErase(), rpmRollback(), rpmtransDealloc(), rpmVerifyScript(), and verifyDependencies().
int rpmtransGetKeys | ( | const rpmTransactionSet | ts, | |
const void *** | ep, | |||
int * | nep | |||
) |
Retrieve keys from ordered transaction set.
ts | transaction set |
ep | address of returned element array pointer (or NULL) | |
nep | address of no. of returned elements (or NULL) |
Definition at line 92 of file transaction.c.
References transactionElement_s::addedIndex, rpmTransactionSet_s::addedPackages, availableList_s::list, rpmTransactionSet_s::order, rpmTransactionSet_s::orderCount, transactionElement_s::type, transactionElement_s::u, and xmalloc().
Referenced by py_rpmtransGetKeys().
int rpmtransRemovePackage | ( | rpmTransactionSet | ts, | |
int | dboffset | |||
) |
Add package to be removed to unordered transaction set.
ts | transaction set | |
dboffset | rpm database instance |
Definition at line 912 of file depends.c.
References removePackage().
Referenced by rpmErase(), rpmRollback(), and rpmtransRemove().
void rpmtransSetScriptFd | ( | rpmTransactionSet | ts, | |
FD_t | fd | |||
) |
Save file handle to be used as stderr when running package scripts.
ts | transaction set | |
fd | file handle |
Definition at line 87 of file transaction.c.
References fdLink, and rpmTransactionSet_s::scriptFd.
Referenced by rpmtransSetAttr().
int rpmvercmp | ( | const char * | a, | |
const char * | b | |||
) |
Segmented string compare for version and/or release.
a | 1st string | |
b | 2nd string |
Definition at line 15 of file rpmvercmp.c.
Referenced by labelCompare(), rpmRangesOverlap(), and rpmVersionCompare().