Main Page | Modules | Data Structures | File List | Data Fields | Globals | Related Pages

lib/transaction.c File Reference

#include "system.h"
#include "rpmcli.h"
#include <rpmlib.h>
#include <rpmmacro.h>
#include "fsm.h"
#include "psm.h"
#include "rpmdb.h"
#include "rpmds.h"
#include "rpmlock.h"
#include "rpmfi.h"
#include "rpmte.h"
#include "rpmts.h"
#include "cpio.h"
#include "fprint.h"
#include "legacy.h"
#include "misc.h"
#include "debug.h"

Include dependency graph for transaction.c:

Go to the source code of this file.

Defines

#define _RPMDB_INTERNAL
#define _RPMFI_INTERNAL
#define _RPMTE_INTERNAL
#define _RPMTS_INTERNAL
#define ISROOT(_d)   (((_d)[0] == '/' && (_d)[1] == '\0') ? "" : (_d))
#define NOTIFY(_ts, _al)   /*@i@*/ if ((_ts)->notify) (void) (_ts)->notify _al

Functions

void * rpmShowProgress (const void *arg, const rpmCallbackType what, const unsigned long long amount, const unsigned long long total, fnpyKey key, void *data)
 The rpm CLI generic transaction callback handler.
static int sharedCmp (const void *one, const void *two)
static int handleInstInstalledFiles (const rpmts ts, rpmte p, rpmfi fi, sharedFileInfo shared, int sharedCount, int reportConflicts)
static int handleRmvdInstalledFiles (const rpmts ts, rpmfi fi, sharedFileInfo shared, int sharedCount)
static int fpsCompare (const void *one, const void *two)
static int findFps (const struct fingerPrint_s *fiFps, const struct fingerPrint_s *otherFps, int otherFc)
static void handleOverlappedFiles (const rpmts ts, const rpmte p, rpmfi fi)
 Update disk space needs on each partition for this package's files.
static int ensureOlder (rpmts ts, const rpmte p, const Header h)
 Ensure that current package is newer than installed package.
static void skipFiles (const rpmts ts, rpmfi fi)
 Skip any files that do not match install policies.
static rpmfi rpmtsiFi (const rpmtsi tsi)
 Return transaction element's file info.
static rpmRC _processFailedPackage (rpmts ts, rpmte p)
 Force add a failed package into the rpmdb.
rpmRC rpmtsRollback (rpmts rbts, rpmprobFilterFlags ignoreSet, int running, rpmte rbte)
 Rollback a failed transaction.
static int cmpArgvStr (const char **AV, const char *B)
 Search for string B in argv array AV.
static int markLinkedFailed (rpmts ts, rpmte p)
 Mark all erasure elements linked to installed element p as failed.
int rpmtsRun (rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
 Process all package elements in a transaction set.

Variables

int _fps_debug = 0
static int _linear_fps_search = 0


Detailed Description

Definition in file transaction.c.


Define Documentation

#define _RPMDB_INTERNAL
 

Definition at line 14 of file transaction.c.

#define _RPMFI_INTERNAL
 

Definition at line 21 of file transaction.c.

#define _RPMTE_INTERNAL
 

Definition at line 24 of file transaction.c.

#define _RPMTS_INTERNAL
 

Definition at line 27 of file transaction.c.

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

Definition at line 280 of file transaction.c.

#define NOTIFY _ts,
_al   )     /*@i@*/ if ((_ts)->notify) (void) (_ts)->notify _al
 

Definition at line 1130 of file transaction.c.

Referenced by rpmtsRun().


Function Documentation

static rpmRC _processFailedPackage rpmts  ts,
rpmte  p
[static]
 

Force add a failed package into the rpmdb.

Parameters:
ts current transaction set
p failed rpmte.
Returns:
RPMRC_OK, or RPMRC_FAIL

Definition at line 919 of file transaction.c.

References PSM_RPMDB_ADD, rpmpsmFree(), rpmpsmNew(), rpmpsmStage(), RPMRC_OK, rpmteType(), rpmpsm_s::stepName, and TR_ADDED.

Referenced by rpmtsRollback().

static int cmpArgvStr const char **  AV,
const char *  B
[static]
 

Search for string B in argv array AV.

Parameters:
AV argv array
B string
Returns:
1 if found, 0 otherwise

Definition at line 1075 of file transaction.c.

static int ensureOlder rpmts  ts,
const rpmte  p,
const Header  h
[static]
 

Ensure that current package is newer than installed package.

Parameters:
ts transaction set
p current transaction element
h installed header
Returns:
0 if not newer, 1 if okay

Definition at line 609 of file transaction.c.

References _free(), _rpmds_nopromote, alloca(), hGetNEVR(), rpmdsFree(), rpmdsNVRMatchesDep(), rpmdsSingle(), RPMPROB_OLDPACKAGE, rpmpsAppend(), rpmpsFree(), RPMSENSE_EQUAL, RPMSENSE_LESS, RPMTAG_REQUIRENAME, rpmteE(), rpmteKey(), rpmteN(), rpmteNEVR(), rpmteR(), rpmteV(), rpmtsProblems(), and stpcpy().

Referenced by rpmtsRun().

static int findFps const struct fingerPrint_s fiFps,
const struct fingerPrint_s otherFps,
int  otherFc
[static]
 

Definition at line 326 of file transaction.c.

References _linear_fps_search, FP_EQUAL, and fpsCompare().

Referenced by handleOverlappedFiles().

static int fpsCompare const void *  one,
const void *  two
[static]
 

Definition at line 285 of file transaction.c.

References alloca(), fingerPrint_s::baseName, fprintCacheEntry_s::dirName, fingerPrint_s::entry, stpcpy(), and fingerPrint_s::subDir.

Referenced by findFps().

static int handleInstInstalledFiles const rpmts  ts,
rpmte  p,
rpmfi  fi,
sharedFileInfo  shared,
int  sharedCount,
int  reportConflicts
[static]
 

Parameters:
ts transaction set
p current transaction element
fi file info set
shared shared file info
sharedCount no. of shared elements
reportConflicts XXX only ts->{probs,rpmdb} modified

Definition at line 95 of file transaction.c.

References _free(), CPIO_SBIT_CHECK, FA_CREATE, FA_SKIPCOLOR, hGetNEVRA(), rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbNextIterator(), rpmfiBN(), rpmfiCompare(), rpmfiDecideFate(), rpmfiDN(), rpmfiFColor(), rpmfiFFlags(), rpmfiFMode(), rpmfiFree(), rpmfiFSize(), rpmfiInit(), RPMFILE_CONFIG, RPMFILE_GHOST, RPMFILE_STATE_NORMAL, rpmfiNew(), rpmfiNext(), rpmfiSetFX(), RPMPROB_FILE_CONFLICT, rpmpsAppend(), rpmpsFree(), RPMTAG_BASENAMES, rpmteColor(), rpmteKey(), rpmteNEVRA(), RPMTRANS_FLAG_ALLFILES, rpmtsColor(), rpmtsFlags(), rpmtsInitIterator(), rpmtsPrefColor(), rpmtsProblems(), xcalloc(), XFA_SKIPPING, and xrealloc().

Referenced by rpmtsRun().

static void handleOverlappedFiles const rpmts  ts,
const rpmte  p,
rpmfi  fi
[static]
 

Update disk space needs on each partition for this package's files.

Definition at line 376 of file transaction.c.

References _free(), fprintCacheEntry_s::dev, dodigest(), fingerPrint_s::entry, FA_ALTNAME, FA_BACKUP, FA_CREATE, FA_ERASE, FA_SKIP, FA_SKIPCOLOR, FA_UNKNOWN, findFps(), htGetEntry(), recs, rpmfiCompare(), rpmfiDigest(), rpmfiFC(), rpmfiFColor(), rpmfiFFlags(), rpmfiFMode(), rpmfiFN(), rpmfiFSize(), rpmfiFState(), rpmfiInit(), RPMFILE_CONFIG, RPMFILE_EXISTS, RPMFILE_NOREPLACE, RPMFILE_SPARSE, RPMFILE_STATE_NORMAL, rpmfiNext(), rpmfiSetFX(), RPMPROB_FILTER_REPLACENEWFILES, RPMPROB_NEW_FILE_CONFLICT, rpmpsAppend(), rpmpsFree(), rpmteKey(), rpmteNEVR(), rpmteType(), rpmtsColor(), rpmtsFilterFlags(), rpmtsPrefColor(), rpmtsProblems(), rpmtsUpdateDSI(), TR_ADDED, TR_REMOVED, xcalloc(), and XFA_SKIPPING.

Referenced by rpmtsRun().

static int handleRmvdInstalledFiles const rpmts  ts,
rpmfi  fi,
sharedFileInfo  shared,
int  sharedCount
[static]
 

Definition at line 238 of file transaction.c.

References FA_SKIP, rpmdbFreeIterator(), RPMDBI_PACKAGES, rpmdbNextIterator(), RPMFILE_STATE_NORMAL, RPMTAG_FILESTATES, and rpmtsInitIterator().

Referenced by rpmtsRun().

static int markLinkedFailed rpmts  ts,
rpmte  p
[static]
 

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

Parameters:
ts transaction set
p failed install transaction element
Returns:
0 always

Definition at line 1095 of file transaction.c.

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

Referenced by rpmtsRun().

static rpmfi rpmtsiFi const rpmtsi  tsi  )  [static]
 

Return transaction element's file info.

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

Definition at line 893 of file transaction.c.

References rpmtsElement().

Referenced by rpmtsRun().

static int sharedCmp const void *  one,
const void *  two
[static]
 

Definition at line 70 of file transaction.c.

Referenced by rpmtsRun().

static void skipFiles const rpmts  ts,
rpmfi  fi
[static]
 

Skip any files that do not match install policies.

Parameters:
ts transaction set
fi file info set

Definition at line 664 of file transaction.c.

References _free(), alloca(), D_, FA_SKIPCOLOR, FA_SKIPNETSHARED, FA_SKIPNSTATE, freeSplitString(), lang, rpmExpand(), rpmExpandNumeric(), rpmfiBN(), rpmfiDC(), rpmfiDN(), rpmfiDX(), rpmfiFColor(), rpmfiFFlags(), rpmfiFMode(), rpmfiInit(), rpmfiInitD(), RPMFILE_CONFIG, RPMFILE_DOC, rpmfiNext(), rpmfiNextD(), RPMMESS_DEBUG, rpmMessage, RPMTRANS_FLAG_NOCONFIGS, RPMTRANS_FLAG_NODOCS, rpmtsColor(), rpmtsFlags(), splitString(), whatis(), XDIR, and XFA_SKIPPING.

Referenced by rpmtsRun().


Variable Documentation

int _fps_debug = 0
 

Definition at line 283 of file transaction.c.

int _linear_fps_search = 0 [static]
 

Definition at line 324 of file transaction.c.

Referenced by findFps().


Generated on Sat Oct 1 16:48:32 2011 for rpm by  doxygen 1.4.4