rpm  5.4.10
Macros | Functions | Variables
transaction.c File Reference
#include "system.h"
#include <rpmio.h>
#include <rpmiotypes.h>
#include <rpmlog.h>
#include <rpmmacro.h>
#include <rpmsx.h>
#include <rpmtypes.h>
#include <rpmtag.h>
#include <pkgio.h>
#include "fprint.h"
#include <rpmdb.h>
#include "legacy.h"
#include <rpmfi.h>
#include "fsm.h"
#include "rpmte.h"
#include "rpmts.h"
#include "psm.h"
#include "rpmds.h"
#include "rpmlock.h"
#include "misc.h"
#include <rpmcli.h>
#include <rpmrollback.h>
#include "debug.h"
Include dependency graph for transaction.c:

Go to the source code of this file.

Macros

#define _FPRINT_INTERNAL
 
#define _RPMDB_INTERNAL   /* XXX for dbiIndexFoo() */
 
#define _RPMFI_INTERNAL
 
#define _RPMTE_INTERNAL
 
#define _RPMTS_INTERNAL
 
#define _RPMSQ_INTERNAL
 
#define _RPMPSM_INTERNAL
 
#define FF_ISSET(_fflags, _FLAG)   ((_fflags) & (RPMFILE_##_FLAG))
 
#define QVA_ISSET(_qvaflags, _FLAG)   ((_qvaflags) & (VERIFY_##_FLAG))
 
#define VSF_ISSET(_vsflags, _FLAG)   ((_vsflags) & (RPMVSF_##_FLAG))
 
#define VSF_SET(_vsflags, _FLAG)   (_vsflags) |= (RPMVSF_##_FLAG)
 
#define VSF_CLR(_vsflags, _FLAG)   (_vsflags) &= ~(RPMVSF_##_FLAG)
 
#define TSF_ISSET(_tsflags, _FLAG)   ((_tsflags) & (RPMTRANS_FLAG_##_FLAG))
 
#define TSF_SET(_tsflags, _FLAG)   (_tsflags) |= (RPMTRANS_FLAG_##_FLAG)
 
#define TSF_CLR(_tsflags, _FLAG)   (_tsflags) &= ~(RPMTRANS_FLAG_##_FLAG)
 
#define IIF_ISSET(_iflags, _FLAG)   ((_iflags) & (INSTALL_##_FLAG))
 
#define IIF_SET(_iflags, _FLAG)   (_iflags) |= (INSTALL_##_FLAG)
 
#define IIF_CLR(_iflags, _FLAG)   (_iflags) &= ~(INSTALL_##_FLAG)
 
#define ISROOT(_d)   (((_d)[0] == '/' && (_d)[1] == '\0') ? "" : (_d))
 
#define FPSDEBUG(_debug, _list)   if ((_debug) || _fps_debug) fprintf _list
 

Functions

static int handleInstInstalledFile (const rpmts ts, rpmte p, rpmfi fi, Header otherHeader, rpmfi otherFi, int beingRemoved)
 
static void handleOverlappedFiles (const rpmts ts, const rpmte p, rpmfi fi)
 Update disk space needs on each partition for this package's files. More...
 
static int ensureOlder (rpmts ts, const rpmte p, const Header h)
 Ensure that current package is newer than installed package. More...
 
static void rpmtsSkipFiles (const rpmts ts, rpmfi fi)
 Skip any files that do not match install policies. More...
 
static rpmfi rpmtsiFi (const rpmtsi tsi)
 Return transaction element's file info. More...
 
static int cmpArgvStr (const char **AV, const char *B)
 Search for string B in argv array AV. More...
 
static int rpmtsMarkLinkedFailed (rpmts ts, rpmte p)
 Mark all erasure elements linked to installed element p as failed. More...
 
static rpmmi rpmtsFindBaseNamesInDB (rpmts ts, uint32_t fileCount)
 
static int rpmtsCheckInstalledFiles (rpmts ts, uint32_t fileCount, hashTable ht, fingerPrintCache fpc)
 
static rpmps rpmtsSanityCheck (rpmts ts, uint32_t *tfcp)
 
static int rpmtsRunScript (rpmts ts, rpmTag stag)
 
static int rpmtsRunScriptTriggers (rpmts ts, rpmTag stag)
 
static void rpmtsAddFingerprints (rpmts ts, uint32_t fileCount, hashTable ht, fingerPrintCache fpc)
 
static int rpmtsSetup (rpmts ts, rpmprobFilterFlags ignoreSet, rpmsx *sxp)
 
static int rpmtsFinish (rpmts ts, rpmsx sx)
 
static int rpmtsPrepare (rpmts ts, rpmsx sx, uint32_t fileCount, uint32_t *nrmvdp)
 
static int rpmtsProcess (rpmts ts, rpmprobFilterFlags ignoreSet, int rollbackFailures)
 
static int rpmtsRepackage (rpmts ts, uint32_t numRemoved)
 
static rpmRC _processFailedPackage (rpmts ts, rpmte p)
 Force add a failed package into the rpmdb. More...
 
rpmRC rpmtsRollback (rpmts rbts, rpmprobFilterFlags ignoreSet, int running, rpmte rbte)
 Rollback a failed transaction. More...
 
int _rpmtsRun (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
 

Variables

int _fps_debug = 0
 
int(* rpmtsRun )(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet) = _rpmtsRun
 Process all package elements in a transaction set. More...
 

Macro Definition Documentation

§ _FPRINT_INTERNAL

#define _FPRINT_INTERNAL

Definition at line 17 of file transaction.c.

§ _RPMDB_INTERNAL

#define _RPMDB_INTERNAL   /* XXX for dbiIndexFoo() */

Definition at line 20 of file transaction.c.

§ _RPMFI_INTERNAL

#define _RPMFI_INTERNAL

Definition at line 24 of file transaction.c.

§ _RPMPSM_INTERNAL

#define _RPMPSM_INTERNAL

Definition at line 34 of file transaction.c.

§ _RPMSQ_INTERNAL

#define _RPMSQ_INTERNAL

Definition at line 33 of file transaction.c.

§ _RPMTE_INTERNAL

#define _RPMTE_INTERNAL

Definition at line 28 of file transaction.c.

§ _RPMTS_INTERNAL

#define _RPMTS_INTERNAL

Definition at line 30 of file transaction.c.

§ FF_ISSET

#define FF_ISSET (   _fflags,
  _FLAG 
)    ((_fflags) & (RPMFILE_##_FLAG))

Definition at line 100 of file transaction.c.

Referenced by handleInstInstalledFile(), handleOverlappedFiles(), and rpmtsSkipFiles().

§ FPSDEBUG

#define FPSDEBUG (   _debug,
  _list 
)    if ((_debug) || _fps_debug) fprintf _list

§ IIF_CLR

#define IIF_CLR (   _iflags,
  _FLAG 
)    (_iflags) &= ~(INSTALL_##_FLAG)

Definition at line 114 of file transaction.c.

§ IIF_ISSET

#define IIF_ISSET (   _iflags,
  _FLAG 
)    ((_iflags) & (INSTALL_##_FLAG))

Definition at line 112 of file transaction.c.

§ IIF_SET

#define IIF_SET (   _iflags,
  _FLAG 
)    (_iflags) |= (INSTALL_##_FLAG)

Definition at line 113 of file transaction.c.

Referenced by rpmtsRollback().

§ ISROOT

#define ISROOT (   _d)    (((_d)[0] == '/' && (_d)[1] == '\0') ? "" : (_d))

Definition at line 229 of file transaction.c.

§ QVA_ISSET

#define QVA_ISSET (   _qvaflags,
  _FLAG 
)    ((_qvaflags) & (VERIFY_##_FLAG))

Definition at line 102 of file transaction.c.

§ TSF_CLR

#define TSF_CLR (   _tsflags,
  _FLAG 
)    (_tsflags) &= ~(RPMTRANS_FLAG_##_FLAG)

Definition at line 110 of file transaction.c.

Referenced by rpmtsRollback().

§ TSF_ISSET

#define TSF_ISSET (   _tsflags,
  _FLAG 
)    ((_tsflags) & (RPMTRANS_FLAG_##_FLAG))

§ TSF_SET

#define TSF_SET (   _tsflags,
  _FLAG 
)    (_tsflags) |= (RPMTRANS_FLAG_##_FLAG)

Definition at line 109 of file transaction.c.

Referenced by rpmtsRollback(), and rpmtsSetup().

§ VSF_CLR

#define VSF_CLR (   _vsflags,
  _FLAG 
)    (_vsflags) &= ~(RPMVSF_##_FLAG)

Definition at line 106 of file transaction.c.

§ VSF_ISSET

#define VSF_ISSET (   _vsflags,
  _FLAG 
)    ((_vsflags) & (RPMVSF_##_FLAG))

Definition at line 104 of file transaction.c.

§ VSF_SET

#define VSF_SET (   _vsflags,
  _FLAG 
)    (_vsflags) |= (RPMVSF_##_FLAG)

Definition at line 105 of file transaction.c.

Referenced by rpmtsRollback().

Function Documentation

§ _processFailedPackage()

static rpmRC _processFailedPackage ( rpmts  ts,
rpmte  p 
)
static

Force add a failed package into the rpmdb.

Parameters
tscurrent transaction set
pfailed rpmte.
Returns
RPMRC_OK, or RPMRC_FAIL

Definition at line 2029 of file transaction.c.

References FPSDEBUG, PSM_RPMDB_ADD, rpmpsmFree(), rpmpsmNew(), rpmpsmStage(), RPMRC_OK, rpmteType(), and TR_ADDED.

Referenced by rpmtsRollback().

§ _rpmtsRun()

int _rpmtsRun ( rpmts  ts,
rpmps  okProbs,
rpmprobFilterFlags  ignoreSet 
)

§ cmpArgvStr()

static int cmpArgvStr ( const char **  AV,
const char *  B 
)
static

Search for string B in argv array AV.

Parameters
AVargv array
Bstring
Returns
1 if found, 0 otherwise

Definition at line 845 of file transaction.c.

Referenced by rpmtsMarkLinkedFailed().

§ ensureOlder()

static int ensureOlder ( rpmts  ts,
const rpmte  p,
const Header  h 
)
static

Ensure that current package is newer than installed package.

Parameters
tstransaction set
pcurrent transaction element
hinstalled header
Returns
0 if not newer, 1 if okay

Definition at line 520 of file transaction.c.

References _free(), _rpmds_nopromote, alloca(), FPSDEBUG, headerGet(), _HE_s::p, rpmDataType_u::ptr, rpmdsFree(), rpmdsNVRMatchesDep(), rpmdsSingle(), RPMPROB_OLDPACKAGE, rpmpsAppend(), rpmpsFree(), RPMSENSE_EQUAL, RPMSENSE_LESS, RPMTAG_NVRA, RPMTAG_REQUIRENAME, rpmteD(), rpmteE(), rpmteKey(), rpmteN(), rpmteNEVR(), rpmteR(), rpmteV(), rpmtsProblems(), stpcpy(), rpmDataType_u::str, and _HE_s::tag.

Referenced by rpmtsSanityCheck().

§ handleInstInstalledFile()

static int handleInstInstalledFile ( const rpmts  ts,
rpmte  p,
rpmfi  fi,
Header  otherHeader,
rpmfi  otherFi,
int  beingRemoved 
)
static

§ handleOverlappedFiles()

static void handleOverlappedFiles ( const rpmts  ts,
const rpmte  p,
rpmfi  fi 
)
static

§ rpmtsAddFingerprints()

static void rpmtsAddFingerprints ( rpmts  ts,
uint32_t  fileCount,
hashTable  ht,
fingerPrintCache  fpc 
)
static

§ rpmtsCheckInstalledFiles()

static int rpmtsCheckInstalledFiles ( rpmts  ts,
uint32_t  fileCount,
hashTable  ht,
fingerPrintCache  fpc 
)
static

§ rpmtsFindBaseNamesInDB()

static rpmmi rpmtsFindBaseNamesInDB ( rpmts  ts,
uint32_t  fileCount 
)
static

§ rpmtsFinish()

static int rpmtsFinish ( rpmts  ts,
rpmsx  sx 
)
static

Definition at line 1547 of file transaction.c.

References FPSDEBUG, rpmsxFree(), rpmtsFlags(), and TSF_ISSET.

Referenced by _rpmtsRun().

§ rpmtsiFi()

static rpmfi rpmtsiFi ( const rpmtsi  tsi)
static

Return transaction element's file info.

Todo:
Take a rpmfi refcount here.
Parameters
tsitransaction element iterator
Returns
transaction element file info

Definition at line 820 of file transaction.c.

References rpmtsElement().

Referenced by rpmtsAddFingerprints(), rpmtsPrepare(), rpmtsProcess(), rpmtsRepackage(), rpmtsRunScript(), and rpmtsSanityCheck().

§ rpmtsMarkLinkedFailed()

static int rpmtsMarkLinkedFailed ( rpmts  ts,
rpmte  p 
)
static

Mark all erasure elements linked to installed element p as failed.

Parameters
tstransaction set
pfailed install transaction element
Returns
0 always

Definition at line 864 of file transaction.c.

References cmpArgvStr(), rpmtsiFree(), rpmtsiInit(), rpmtsiNext(), and TR_REMOVED.

Referenced by rpmtsProcess().

§ rpmtsPrepare()

static int rpmtsPrepare ( rpmts  ts,
rpmsx  sx,
uint32_t  fileCount,
uint32_t *  nrmvdp 
)
static

§ rpmtsProcess()

static int rpmtsProcess ( rpmts  ts,
rpmprobFilterFlags  ignoreSet,
int  rollbackFailures 
)
static

§ rpmtsRepackage()

static int rpmtsRepackage ( rpmts  ts,
uint32_t  numRemoved 
)
static

§ rpmtsRollback()

rpmRC rpmtsRollback ( rpmts  rbts,
rpmprobFilterFlags  ignoreSet,
int  running,
rpmte  rbte 
)

§ rpmtsRunScript()

static int rpmtsRunScript ( rpmts  ts,
rpmTag  stag 
)
static

§ rpmtsRunScriptTriggers()

static int rpmtsRunScriptTriggers ( rpmts  ts,
rpmTag  stag 
)
static

§ rpmtsSanityCheck()

static rpmps rpmtsSanityCheck ( rpmts  ts,
uint32_t *  tfcp 
)
static

§ rpmtsSetup()

static int rpmtsSetup ( rpmts  ts,
rpmprobFilterFlags  ignoreSet,
rpmsx sxp 
)
static

§ rpmtsSkipFiles()

static void rpmtsSkipFiles ( const rpmts  ts,
rpmfi  fi 
)
static

Variable Documentation

§ _fps_debug

int _fps_debug = 0

Definition at line 232 of file transaction.c.

§ rpmtsRun

int(* rpmtsRun) (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet) = _rpmtsRun

Process all package elements in a transaction set.

Before calling rpmtsRun be sure to have:

Additionally, though not required you may want to:

Parameters
tstransaction set
okProbspreviously known problems (or NULL)
ignoreSetbits to filter problem types
Returns
0 on success, -1 on error, >0 with newProbs set

Definition at line 2353 of file transaction.c.

Referenced by rpmcliInstallRun(), and rpmts_Run().