summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.c4
-rw-r--r--lib/depends.c118
-rw-r--r--lib/psm.c2
-rw-r--r--lib/rpmds.h2
-rw-r--r--lib/rpmfi.c2
-rw-r--r--lib/rpminstall.c20
-rw-r--r--lib/rpmte.c62
-rw-r--r--lib/rpmte.h35
-rw-r--r--lib/rpmts.c26
-rw-r--r--lib/rpmts.h12
-rw-r--r--lib/transaction.c98
-rw-r--r--lib/ts.c4
-rw-r--r--lib/verify.c4
-rw-r--r--python/Makefile.am6
-rw-r--r--python/Makefile.in14
-rw-r--r--python/db-py.c2
-rw-r--r--python/rpmfd-py.c215
-rw-r--r--python/rpmfd-py.h17
-rw-r--r--python/rpmmodule.c140
-rw-r--r--python/rpmte-py.c272
-rw-r--r--python/rpmte-py.h17
-rw-r--r--python/rpmts-py.c113
-rw-r--r--python/rpmts-py.h2
-rw-r--r--tools/rpmsort.c16
24 files changed, 851 insertions, 352 deletions
diff --git a/build.c b/build.c
index 5e2e1d888..9be05e0be 100644
--- a/build.c
+++ b/build.c
@@ -31,11 +31,11 @@ static int checkSpec(rpmts ts, Header h)
&& !headerIsEntry(h, RPMTAG_CONFLICTNAME))
return 0;
- rc = rpmtsAddPackage(ts, h, NULL, 0, NULL);
+ rc = rpmtsAddInstallElement(ts, h, NULL, 0, NULL);
rc = rpmtsCheck(ts);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (rc == 0 && ps) {
rpmMessage(RPMMESS_ERROR, _("Failed build dependencies:\n"));
printDepProblems(stderr, ps);
diff --git a/lib/depends.c b/lib/depends.c
index cd58e5451..95250e49a 100644
--- a/lib/depends.c
+++ b/lib/depends.c
@@ -121,13 +121,13 @@ static int removePackage(rpmts ts, Header h, int dboffset,
return 0;
}
-int rpmtsAddPackage(rpmts ts, Header h,
+int rpmtsAddInstallElement(rpmts ts, Header h,
fnpyKey key, int upgrade, rpmRelocation * relocs)
{
HGE_t hge = (HGE_t)headerGetEntryMinMemory;
int isSource;
int duplicate = 0;
- rpmtei pi; rpmte p;
+ rpmtsi pi; rpmte p;
rpmds add;
rpmds obsoletes;
alKey pkgKey; /* addedPackages key */
@@ -142,7 +142,7 @@ int rpmtsAddPackage(rpmts ts, Header h,
*/
add = rpmdsThis(h, RPMTAG_REQUIRENAME, (RPMSENSE_EQUAL|RPMSENSE_LESS));
pkgKey = RPMAL_NOMATCH;
- for (pi = rpmteiInit(ts), oc = 0; (p = rpmteiNext(pi, 0)) != NULL; oc++) {
+ for (pi = rpmtsiInit(ts), oc = 0; (p = rpmtsiNext(pi, 0)) != NULL; oc++) {
rpmds this;
/* XXX Only added packages need be checked for dupes. */
@@ -165,7 +165,7 @@ int rpmtsAddPackage(rpmts ts, Header h,
break;
}
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
add = rpmdsFree(add);
isSource = headerIsEntry(h, RPMTAG_SOURCEPACKAGE);
@@ -302,10 +302,11 @@ int rpmtsAddPackage(rpmts ts, Header h,
ec = 0;
exit:
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
return ec;
}
+#ifdef DYING
void rpmtsAvailablePackage(rpmts ts, Header h, fnpyKey key)
{
int scareMem = 0;
@@ -318,8 +319,9 @@ void rpmtsAvailablePackage(rpmts ts, Header h, fnpyKey key)
fi = rpmfiFree(fi, 1);
provides = rpmdsFree(provides);
}
+#endif
-int rpmtsRemovePackage(rpmts ts, Header h, int dboffset)
+int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
{
return removePackage(ts, h, dboffset, RPMAL_NOMATCH);
}
@@ -980,7 +982,7 @@ static inline int addRelation(rpmts ts,
/*@globals fileSystem @*/
/*@modifies ts, p, *selected, fileSystem @*/
{
- rpmtei qi; rpmte q;
+ rpmtsi qi; rpmte q;
tsortInfo tsi;
const char * Name;
fnpyKey key;
@@ -1006,7 +1008,7 @@ fprintf(stderr, "addRelation: pkgKey %ld\n", (long)pkgKey);
/* XXX Set q to the added package that has pkgKey == q->u.addedKey */
/* XXX FIXME: bsearch is possible/needed here */
- for (qi = rpmteiInit(ts), i = 0; (q = rpmteiNext(qi, 0)) != NULL; i++) {
+ for (qi = rpmtsiInit(ts), i = 0; (q = rpmtsiNext(qi, 0)) != NULL; i++) {
/* XXX Only added packages need be checked for matches. */
if (rpmteType(q) == TR_REMOVED)
@@ -1015,7 +1017,7 @@ fprintf(stderr, "addRelation: pkgKey %ld\n", (long)pkgKey);
if (pkgKey == rpmteAddedKey(q))
break;
}
- qi = rpmteiFree(qi);
+ qi = rpmtsiFree(qi);
if (q == NULL || i == ts->orderCount)
return 0;
@@ -1150,9 +1152,9 @@ int rpmtsOrder(rpmts ts)
#else
int chainsaw = 1;
#endif
- rpmtei pi; rpmte p;
- rpmtei qi; rpmte q;
- rpmtei ri; rpmte r;
+ rpmtsi pi; rpmte p;
+ rpmtsi qi; rpmte q;
+ rpmtsi ri; rpmte r;
tsortInfo tsi;
tsortInfo tsi_next;
alKey * ordering;
@@ -1196,16 +1198,16 @@ fprintf(stderr, "*** rpmtsOrder(%p) order %p[%d]\n", ts, ts->order, ts->orderCou
ordering = alloca(sizeof(*ordering) * (numOrderList + 1));
loopcheck = numOrderList;
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, oType)) != NULL)
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, oType)) != NULL)
rpmteNewTSI(p);
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/* Record all relations. */
rpmMessage(RPMMESS_DEBUG, _("========== recording tsort relations\n"));
- pi = rpmteiInit(ts);
+ pi = rpmtsiInit(ts);
/* XXX Only added packages are ordered (for now). */
- while ((p = rpmteiNext(pi, oType)) != NULL) {
+ while ((p = rpmtsiNext(pi, oType)) != NULL) {
if ((requires = rpmteDS(p, RPMTAG_REQUIRENAME)) == NULL)
continue;
@@ -1213,7 +1215,7 @@ fprintf(stderr, "*** rpmtsOrder(%p) order %p[%d]\n", ts, ts->order, ts->orderCou
memset(selected, 0, sizeof(*selected) * ts->orderCount);
/* Avoid narcisstic relations. */
- selected[rpmteiGetOc(pi)] = 1;
+ selected[rpmtsiOc(pi)] = 1;
/* T2. Next "q <- p" relation. */
@@ -1279,12 +1281,12 @@ fprintf(stderr, "*** rpmtsOrder(%p) order %p[%d]\n", ts, ts->order, ts->orderCou
}
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/* Save predecessor count and mark tree roots. */
treex = 0;
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, oType)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, oType)) != NULL) {
int npreds;
npreds = rpmteTSI(p)->tsi_count;
@@ -1301,25 +1303,25 @@ fprintf(stderr, "*** rpmtsOrder(%p) order %p[%d]\n", ts, ts->order, ts->orderCou
/*@-modfilesystem -nullpass @*/
if (_tso_debug)
-/*@i@*/ fprintf(stderr, "\t+++ %p[%d] %s npreds %d\n", p, rpmteiGetOc(pi), rpmteNEVR(p), rpmteNpreds(p));
+/*@i@*/ fprintf(stderr, "\t+++ %p[%d] %s npreds %d\n", p, rpmtsiOc(pi), rpmteNEVR(p), rpmteNpreds(p));
/*@=modfilesystem =nullpass @*/
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/* T4. Scan for zeroes. */
rpmMessage(RPMMESS_DEBUG, _("========== tsorting packages (order, #predecessors, #succesors, tree, depth)\n"));
rescan:
- if (pi != NULL) pi = rpmteiFree(pi);
+ if (pi != NULL) pi = rpmtsiFree(pi);
q = r = NULL;
qlen = 0;
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, oType)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, oType)) != NULL) {
/* Prefer packages in chainsaw or presentation order. */
if (!chainsaw)
- rpmteTSI(p)->tsi_qcnt = (ts->orderCount - rpmteiGetOc(pi));
+ rpmteTSI(p)->tsi_qcnt = (ts->orderCount - rpmtsiOc(pi));
if (rpmteTSI(p)->tsi_count != 0)
continue;
@@ -1332,7 +1334,7 @@ if (_tso_debug)
prtTSI(" p", rpmteTSI(p));
/*@=modfilesystem =nullpass @*/
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/* T5. Output front of queue (T7. Remove from queue.) */
for (; q != NULL; q = rpmteTSI(q)->tsi_suc) {
@@ -1405,15 +1407,15 @@ prtTSI(" p", rpmteTSI(p));
/* Relink the queue in presentation order. */
tsi = rpmteTSI(q);
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, oType)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, oType)) != NULL) {
/* Is this element in the queue? */
if (rpmteTSI(p)->tsi_reqx == 0)
/*@innercontinue@*/ continue;
tsi->tsi_suc = p;
tsi = rpmteTSI(p);
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
tsi->tsi_suc = NULL;
}
}
@@ -1424,30 +1426,30 @@ prtTSI(" p", rpmteTSI(p));
/* T9. Initialize predecessor chain. */
nzaps = 0;
- qi = rpmteiInit(ts);
- while ((q = rpmteiNext(qi, oType)) != NULL) {
+ qi = rpmtsiInit(ts);
+ while ((q = rpmtsiNext(qi, oType)) != NULL) {
rpmteTSI(q)->tsi_chain = NULL;
rpmteTSI(q)->tsi_reqx = 0;
/* Mark packages already sorted. */
if (rpmteTSI(q)->tsi_count == 0)
rpmteTSI(q)->tsi_count = -1;
}
- qi = rpmteiFree(qi);
+ qi = rpmtsiFree(qi);
/* T10. Mark all packages with their predecessors. */
- qi = rpmteiInit(ts);
- while ((q = rpmteiNext(qi, oType)) != NULL) {
+ qi = rpmtsiInit(ts);
+ while ((q = rpmtsiNext(qi, oType)) != NULL) {
if ((tsi = rpmteTSI(q)->tsi_next) == NULL)
continue;
rpmteTSI(q)->tsi_next = NULL;
markLoop(tsi, q);
rpmteTSI(q)->tsi_next = tsi;
}
- qi = rpmteiFree(qi);
+ qi = rpmtsiFree(qi);
/* T11. Print all dependency loops. */
- ri = rpmteiInit(ts);
- while ((r = rpmteiNext(ri, oType)) != NULL)
+ ri = rpmtsiInit(ts);
+ while ((r = rpmtsiNext(ri, oType)) != NULL)
{
int printed;
@@ -1501,7 +1503,7 @@ prtTSI(" p", rpmteTSI(p));
rpmteTSI(p)->tsi_reqx = 0;
}
}
- ri = rpmteiFree(ri);
+ ri = rpmtsiFree(ri);
/* If a relation was eliminated, then continue sorting. */
/* XXX TODO: add control bit. */
@@ -1517,10 +1519,10 @@ prtTSI(" p", rpmteTSI(p));
}
/* Clean up tsort remnants (if any). */
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL)
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL)
rpmteFreeTSI(p);
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/*
* The order ends up as installed packages followed by removed packages,
@@ -1530,8 +1532,8 @@ prtTSI(" p", rpmteTSI(p));
*/
orderList = xcalloc(numOrderList, sizeof(*orderList));
j = 0;
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, oType)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, oType)) != NULL) {
/* Prepare added package ordering permutation. */
switch (rpmteType(p)) {
case TR_ADDED:
@@ -1541,10 +1543,10 @@ prtTSI(" p", rpmteTSI(p));
orderList[j].pkgKey = RPMAL_NOMATCH;
/*@switchbreak@*/ break;
}
- orderList[j].orIndex = rpmteiGetOc(pi);
+ orderList[j].orIndex = rpmtsiOc(pi);
j++;
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
qsort(orderList, numOrderList, sizeof(*orderList), orderListIndexCmp);
@@ -1602,11 +1604,11 @@ assert(newOrderCount == ts->orderCount);
#ifdef DYING
/* Clean up after dependency checks */
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
rpmteCleanDS(p);
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
ts->addedPackages = rpmalFree(ts->addedPackages);
ts->numAddedPackages = 0;
@@ -1655,7 +1657,7 @@ static int rpmdbCloseDBI(/*@null@*/ rpmdb db, int rpmtag)
int rpmtsCheck(rpmts ts)
{
rpmdbMatchIterator mi = NULL;
- rpmtei pi = NULL; rpmte p;
+ rpmtsi pi = NULL; rpmte p;
int closeatexit = 0;
int xx;
int rc;
@@ -1677,8 +1679,8 @@ int rpmtsCheck(rpmts ts)
* Look at all of the added packages and make sure their dependencies
* are satisfied.
*/
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, TR_ADDED)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL) {
rpmds provides;
rpmMessage(RPMMESS_DEBUG, "========== +++ %s\n" , rpmteNEVR(p));
@@ -1718,13 +1720,13 @@ int rpmtsCheck(rpmts ts)
if (rc)
goto exit;
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/*
* Look at the removed packages and make sure they aren't critical.
*/
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, TR_REMOVED)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, TR_REMOVED)) != NULL) {
rpmds provides;
rpmfi fi;
@@ -1772,13 +1774,13 @@ int rpmtsCheck(rpmts ts)
if (rc)
goto exit;
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
rc = 0;
exit:
mi = rpmdbFreeIterator(mi);
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/*@-branchstate@*/
if (closeatexit)
xx = rpmtsCloseDB(ts);
diff --git a/lib/psm.c b/lib/psm.c
index f83f36cc5..5d86e24ba 100644
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -494,7 +494,7 @@ rpmRC rpmInstallSourcePackage(rpmts ts, FD_t fd,
goto exit;
}
- (void) rpmtsAddPackage(ts, h, NULL, 0, NULL);
+ (void) rpmtsAddInstallElement(ts, h, NULL, 0, NULL);
fi = rpmfiNew(ts, fi, h, RPMTAG_BASENAMES, scareMem);
h = headerFree(h, "InstallSourcePackage");
diff --git a/lib/rpmds.h b/lib/rpmds.h
index 1ded5e922..3fbbf82f6 100644
--- a/lib/rpmds.h
+++ b/lib/rpmds.h
@@ -6,6 +6,8 @@
* Structure(s) used for dependency tag sets.
*/
+/**
+ */
/*@unchecked@*/
extern int _rpmds_debug;
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
index 741b5f9e2..9c542133c 100644
--- a/lib/rpmfi.c
+++ b/lib/rpmfi.c
@@ -485,7 +485,7 @@ Header relocateFileList(const rpmts ts, rpmfi fi,
/* XXX actions check prevents problem from being appended twice. */
if (j == numValid && !allowBadRelocate && actions) {
- rpmps ps = rpmtsGetProblems(ts);
+ rpmps ps = rpmtsProblems(ts);
rpmpsAppend(ps, RPMPROB_BADRELOCATE,
rpmteNEVR(p), rpmteKey(p),
relocations[i].oldPath, NULL, NULL, 0);
diff --git a/lib/rpminstall.c b/lib/rpminstall.c
index fb9250472..952f253c1 100644
--- a/lib/rpminstall.c
+++ b/lib/rpminstall.c
@@ -454,7 +454,7 @@ restart:
}
/*@-abstract@*/
- rc = rpmtsAddPackage(ts, eiu->h, (fnpyKey)fileName,
+ rc = rpmtsAddInstallElement(ts, eiu->h, (fnpyKey)fileName,
(ia->installInterfaceFlags & INSTALL_UPGRADE) != 0,
relocations);
/*@=abstract@*/
@@ -537,7 +537,7 @@ restart:
stopInstall = 1;
}
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (!stopInstall && ps) {
rpmMessage(RPMMESS_ERROR, _("Failed dependencies:\n"));
printDepProblems(stderr, ps);
@@ -579,7 +579,7 @@ restart:
rpmMessage(RPMMESS_DEBUG, _("installing binary packages\n"));
rc = rpmtsRun(ts, NULL, probFilter);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (rc < 0) {
eiu->numFailed += eiu->numRPMS;
@@ -679,7 +679,7 @@ int rpmErase(rpmts ts,
while ((h = rpmdbNextIterator(mi)) != NULL) {
unsigned int recOffset = rpmdbGetIteratorOffset(mi);
if (recOffset) {
- (void) rpmtsRemovePackage(ts, h, recOffset);
+ (void) rpmtsAddEraseElement(ts, h, recOffset);
numPackages++;
}
}
@@ -694,7 +694,7 @@ int rpmErase(rpmts ts,
stopUninstall = 1;
}
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (!stopUninstall && ps) {
rpmMessage(RPMMESS_ERROR, _("removing these packages would break "
"dependencies:\n"));
@@ -708,7 +708,7 @@ int rpmErase(rpmts ts,
if (!stopUninstall) {
(void) rpmtsSetFlags(ts, (rpmtsFlags(ts) | RPMTRANS_FLAG_REVERSE));
numFailed += rpmtsRun(ts, NULL, 0);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
ps = rpmpsFree(ps);
}
@@ -1013,7 +1013,7 @@ int rpmRollback(rpmts ts,
rpmMessage(RPMMESS_DEBUG, "\t+++ %s\n", rp->key);
- rc = rpmtsAddPackage(ts, rp->h, (fnpyKey)rp->key,
+ rc = rpmtsAddInstallElement(ts, rp->h, (fnpyKey)rp->key,
0, ia->relocations);
if (rc != 0)
goto exit;
@@ -1038,7 +1038,7 @@ int rpmRollback(rpmts ts,
rpmMessage(RPMMESS_DEBUG,
"\t--- rpmdb instance #%u\n", ip->instance);
- rc = rpmtsRemovePackage(ts, ip->instance);
+ rc = rpmtsAddEraseElement(ts, ip->instance);
if (rc != 0)
goto exit;
@@ -1065,7 +1065,7 @@ int rpmRollback(rpmts ts,
packagesTotal, ctime(&tid));
rc = rpmtsCheck(ts);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (rc != 0 && ps) {
rpmMessage(RPMMESS_ERROR, _("Failed dependencies:\n"));
printDepProblems(stderr, ps);
@@ -1079,7 +1079,7 @@ int rpmRollback(rpmts ts,
goto exit;
rc = rpmtsRun(ts, NULL, (ia->probFilter|RPMPROB_FILTER_OLDPACKAGE));
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (rc > 0)
rpmpsPrint(stderr, ps);
ps = rpmpsFree(ps);
diff --git a/lib/rpmte.c b/lib/rpmte.c
index dd4aa5a55..fee9b899d 100644
--- a/lib/rpmte.c
+++ b/lib/rpmte.c
@@ -19,11 +19,11 @@
#include "debug.h"
/*@unchecked@*/
-int _te_debug = 0;
+int _rpmte_debug = 0;
/*@access alKey @*/
-/*@access rpmtei @*/
/*@access rpmte @*/
+/*@access rpmtsi @*/
/*@access rpmts @*/
void rpmteCleanDS(rpmte te)
@@ -419,72 +419,72 @@ rpmfi rpmteFI(rpmte te, rpmTag tag)
/*@=compdef =refcounttrans =retalias =retexpose =usereleased @*/
}
-int rpmteiGetOc(rpmtei tei)
+int rpmtsiOc(rpmtsi tsi)
{
- return tei->ocsave;
+ return tsi->ocsave;
}
-rpmtei XrpmteiFree(/*@only@*//*@null@*/ rpmtei tei,
+rpmtsi XrpmtsiFree(/*@only@*//*@null@*/ rpmtsi tsi,
const char * fn, unsigned int ln)
{
- if (tei)
- tei->ts = rpmtsUnlink(tei->ts, "tsIterator");
+ if (tsi)
+ tsi->ts = rpmtsUnlink(tsi->ts, "rpmtsiInit");
/*@-modfilesys@*/
-if (_te_debug)
-fprintf(stderr, "*** tei %p -- %s:%d\n", tei, fn, ln);
+if (_rpmte_debug)
+fprintf(stderr, "*** tsi %p -- %s:%d\n", tsi, fn, ln);
/*@=modfilesys@*/
- return _free(tei);
+ return _free(tsi);
}
-rpmtei XrpmteiInit(rpmts ts, const char * fn, unsigned int ln)
+rpmtsi XrpmtsiInit(rpmts ts, const char * fn, unsigned int ln)
{
- rpmtei tei = NULL;
+ rpmtsi tsi = NULL;
- tei = xcalloc(1, sizeof(*tei));
- tei->ts = rpmtsLink(ts, "rpmtei");
- tei->reverse = ((rpmtsFlags(ts) & RPMTRANS_FLAG_REVERSE) ? 1 : 0);
- tei->oc = (tei->reverse ? (rpmtsNElements(ts) - 1) : 0);
- tei->ocsave = tei->oc;
+ tsi = xcalloc(1, sizeof(*tsi));
+ tsi->ts = rpmtsLink(ts, "rpmtsi");
+ tsi->reverse = ((rpmtsFlags(ts) & RPMTRANS_FLAG_REVERSE) ? 1 : 0);
+ tsi->oc = (tsi->reverse ? (rpmtsNElements(ts) - 1) : 0);
+ tsi->ocsave = tsi->oc;
/*@-modfilesys@*/
-if (_te_debug)
-fprintf(stderr, "*** tei %p ++ %s:%d\n", tei, fn, ln);
+if (_rpmte_debug)
+fprintf(stderr, "*** tsi %p ++ %s:%d\n", tsi, fn, ln);
/*@=modfilesys@*/
- return tei;
+ return tsi;
}
/**
* Return next transaction element.
- * @param tei transaction element iterator
+ * @param tsi transaction element iterator
* @return transaction element, NULL on termination
*/
static /*@dependent@*/ /*@null@*/
-rpmte rpmteiNextIterator(rpmtei tei)
- /*@modifies tei @*/
+rpmte rpmtsiNextElement(rpmtsi tsi)
+ /*@modifies tsi @*/
{
rpmte te = NULL;
int oc = -1;
- if (tei == NULL || tei->ts == NULL || rpmtsNElements(tei->ts) <= 0)
+ if (tsi == NULL || tsi->ts == NULL || rpmtsNElements(tsi->ts) <= 0)
return te;
- if (tei->reverse) {
- if (tei->oc >= 0) oc = tei->oc--;
+ if (tsi->reverse) {
+ if (tsi->oc >= 0) oc = tsi->oc--;
} else {
- if (tei->oc < rpmtsNElements(tei->ts)) oc = tei->oc++;
+ if (tsi->oc < rpmtsNElements(tsi->ts)) oc = tsi->oc++;
}
- tei->ocsave = oc;
+ tsi->ocsave = oc;
/*@-branchstate@*/
if (oc != -1)
- te = rpmtsElement(tei->ts, oc);
+ te = rpmtsElement(tsi->ts, oc);
/*@=branchstate@*/
return te;
}
-rpmte rpmteiNext(rpmtei tei, rpmElementType type)
+rpmte rpmtsiNext(rpmtsi tsi, rpmElementType type)
{
rpmte te;
- while ((te = rpmteiNextIterator(tei)) != NULL) {
+ while ((te = rpmtsiNextElement(tsi)) != NULL) {
if (type == 0 || (te->type & type) != 0)
break;
}
diff --git a/lib/rpmte.h b/lib/rpmte.h
index 7f0185ffa..b2e0d94db 100644
--- a/lib/rpmte.h
+++ b/lib/rpmte.h
@@ -7,6 +7,11 @@
*/
/**
+ */
+/*@unchecked@*/
+extern int _rpmte_debug;
+
+/**
* Transaction element ordering chain linkage.
*/
typedef /*@abstract@*/ struct tsortInfo_s * tsortInfo;
@@ -14,7 +19,7 @@ typedef /*@abstract@*/ struct tsortInfo_s * tsortInfo;
/**
* Transaction element iterator.
*/
-typedef /*@abstract@*/ struct rpmtei_s * rpmtei;
+typedef /*@abstract@*/ struct rpmtsi_s * rpmtsi;
/** \ingroup rpmte
* Transaction element type.
@@ -121,7 +126,7 @@ struct rpmte_s {
/**
* Iterator across transaction elements, forward on install, backward on erase.
*/
-struct rpmtei_s {
+struct rpmtsi_s {
/*@refcounted@*/
rpmts ts; /*!< transaction set. */
int reverse; /*!< reversed traversal? */
@@ -441,33 +446,33 @@ rpmfi rpmteFI(rpmte te, rpmTag tag)
/**
* Return transaction element index.
- * @param tei transaction element iterator
+ * @param tsi transaction element iterator
* @return transaction element index
*/
-int rpmteiGetOc(rpmtei tei)
+int rpmtsiOc(rpmtsi tsi)
/*@*/;
/**
* Destroy transaction element iterator.
- * @param tei transaction element iterator
+ * @param tsi transaction element iterator
* @return NULL always
*/
/*@unused@*/ /*@null@*/
-rpmtei rpmteiFree(/*@only@*//*@null@*/ rpmtei tei)
+rpmtsi rpmtsiFree(/*@only@*//*@null@*/ rpmtsi tsi)
/*@*/;
/**
* Destroy transaction element iterator.
- * @param tei transaction element iterator
+ * @param tsi transaction element iterator
* @param fn
* @param ln
* @return NULL always
*/
/*@null@*/
-rpmtei XrpmteiFree(/*@only@*//*@null@*/ rpmtei tei,
+rpmtsi XrpmtsiFree(/*@only@*//*@null@*/ rpmtsi tsi,
const char * fn, unsigned int ln)
/*@*/;
-#define rpmteiFree(_tei) XrpmteiFree(_tei, __FILE__, __LINE__)
+#define rpmtsiFree(_tsi) XrpmtsiFree(_tsi, __FILE__, __LINE__)
/**
* Create transaction element iterator.
@@ -475,7 +480,7 @@ rpmtei XrpmteiFree(/*@only@*//*@null@*/ rpmtei tei,
* @return transaction element iterator
*/
/*@unused@*/ /*@only@*/
-rpmtei rpmteiInit(rpmts ts)
+rpmtsi rpmtsiInit(rpmts ts)
/*@modifies ts @*/;
/**
@@ -486,20 +491,20 @@ rpmtei rpmteiInit(rpmts ts)
* @return transaction element iterator
*/
/*@unused@*/ /*@only@*/
-rpmtei XrpmteiInit(rpmts ts,
+rpmtsi XrpmtsiInit(rpmts ts,
const char * fn, unsigned int ln)
/*@modifies ts @*/;
-#define rpmteiInit(_ts) XrpmteiInit(_ts, __FILE__, __LINE__)
+#define rpmtsiInit(_ts) XrpmtsiInit(_ts, __FILE__, __LINE__)
/**
* Return next transaction element of type.
- * @param tei transaction element iterator
+ * @param tsi transaction element iterator
* @param type transaction element type selector (0 for any)
* @return next transaction element of type, NULL on termination
*/
/*@dependent@*/ /*@null@*/
-rpmte rpmteiNext(rpmtei tei, rpmElementType type)
- /*@modifies tei @*/;
+rpmte rpmtsiNext(rpmtsi tsi, rpmElementType type)
+ /*@modifies tsi @*/;
#ifdef __cplusplus
}
diff --git a/lib/rpmts.c b/lib/rpmts.c
index 7615bbac7..881cc0e3e 100644
--- a/lib/rpmts.c
+++ b/lib/rpmts.c
@@ -311,7 +311,7 @@ int rpmtsAvailable(rpmts ts, const rpmds ds)
/*@=nullstate@*/
}
-rpmps rpmtsGetProblems(rpmts ts)
+rpmps rpmtsProblems(rpmts ts)
{
rpmps ps = NULL;
if (ts) {
@@ -326,13 +326,13 @@ rpmps rpmtsGetProblems(rpmts ts)
void rpmtsClean(rpmts ts)
{
if (ts) {
- rpmtei pi; rpmte p;
+ rpmtsi pi; rpmte p;
/* Clean up after dependency checks. */
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL)
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL)
rpmteCleanDS(p);
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
ts->addedPackages = rpmalFree(ts->addedPackages);
ts->numAddedPackages = 0;
@@ -353,7 +353,7 @@ void rpmtsClean(rpmts ts)
rpmts rpmtsFree(rpmts ts)
{
if (ts) {
- rpmtei pi; rpmte p;
+ rpmtsi pi; rpmte p;
int oc;
(void) rpmtsUnlink(ts, "tsCreate");
@@ -379,12 +379,12 @@ rpmts rpmtsFree(rpmts ts)
ts->rootDir = _free(ts->rootDir);
ts->currDir = _free(ts->currDir);
- for (pi = rpmteiInit(ts), oc = 0; (p = rpmteiNext(pi, 0)) != NULL; oc++) {
+ for (pi = rpmtsiInit(ts), oc = 0; (p = rpmtsiNext(pi, 0)) != NULL; oc++) {
/*@-type -unqualifiedtrans @*/
ts->order[oc] = rpmteFree(ts->order[oc]);
/*@=type =unqualifiedtrans @*/
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/*@-type +voidabstract @*/ /* FIX: double indirection */
ts->order = _free(ts->order);
/*@=type =voidabstract @*/
@@ -678,7 +678,7 @@ void rpmtsCheckDSIProblems(const rpmts ts, const rpmte te)
if (fc <= 0)
return;
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
for (i = 0; i < ts->filesystemCount; i++, dsi++) {
/* XXX Avoid FAT and other file systems that have not inodes. */
@@ -775,12 +775,12 @@ int rpmtsGetKeys(const rpmts ts, fnpyKey ** ep, int * nep)
if (nep) *nep = ts->orderCount;
if (ep) {
- rpmtei pi; rpmte p;
+ rpmtsi pi; rpmte p;
fnpyKey * e;
*ep = e = xmalloc(ts->orderCount * sizeof(*e));
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
switch (rpmteType(p)) {
case TR_ADDED:
/*@-dependenttrans@*/
@@ -794,7 +794,7 @@ int rpmtsGetKeys(const rpmts ts, fnpyKey ** ep, int * nep)
}
e++;
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
}
return rc;
}
diff --git a/lib/rpmts.h b/lib/rpmts.h
index 0a01605cf..6fecf39a8 100644
--- a/lib/rpmts.h
+++ b/lib/rpmts.h
@@ -104,9 +104,11 @@ struct rpmts_s {
rpmal addedPackages; /*!< Set of packages being installed. */
int numAddedPackages; /*!< No. added package instances. */
+#ifndef DYING
/*@only@*/
rpmal availablePackages; /*!< Universe of available packages. */
int numAvailablePackages; /*!< No. available package instances. */
+#endif
/*@owned@*/
rpmte * order; /*!< Packages sorted by dependencies. */
@@ -288,12 +290,12 @@ int rpmtsAvailable(rpmts ts, const rpmds ds)
/*@modifies ts, fileSystem @*/;
/**
- * Return (and clear) current transaction set problems.
+ * Return current transaction set problems.
* @param ts transaction set
* @return current problem set (or NULL)
*/
/*@null@*/
-rpmps rpmtsGetProblems(rpmts ts)
+rpmps rpmtsProblems(rpmts ts)
/*@modifies ts @*/;
/** \ingroup rpmts
@@ -544,12 +546,13 @@ rpmts rpmtsCreate(void)
* @param relocs package file relocations
* @return 0 on success, 1 on I/O error, 2 needs capabilities
*/
-int rpmtsAddPackage(rpmts ts, Header h,
+int rpmtsAddInstallElement(rpmts ts, Header h,
/*@exposed@*/ /*@null@*/ const fnpyKey key, int upgrade,
/*@null@*/ rpmRelocation * relocs)
/*@globals fileSystem, internalState @*/
/*@modifies ts, h, fileSystem, internalState @*/;
+#ifdef DYING
/** \ingroup rpmts
* Add package to universe of possible packages to install in transaction set.
* @warning The key parameter is non-functional.
@@ -561,6 +564,7 @@ int rpmtsAddPackage(rpmts ts, Header h,
void rpmtsAvailablePackage(rpmts ts, Header h,
/*@exposed@*/ /*@null@*/ fnpyKey key)
/*@modifies h, ts @*/;
+#endif
/** \ingroup rpmts
* Add package to be erased to transaction set.
@@ -569,7 +573,7 @@ void rpmtsAvailablePackage(rpmts ts, Header h,
* @param dboffset rpm database instance
* @return 0 on success
*/
-int rpmtsRemovePackage(rpmts ts, Header h, int dboffset)
+int rpmtsAddEraseElement(rpmts ts, Header h, int dboffset)
/*@modifies ts, h @*/;
/** \ingroup rpmts
diff --git a/lib/transaction.c b/lib/transaction.c
index 804605346..cef9b7483 100644
--- a/lib/transaction.c
+++ b/lib/transaction.c
@@ -42,7 +42,7 @@
/*@access rpmfi @*/
-/*@access rpmtei @*/
+/*@access rpmtsi @*/
/*@access rpmts @*/
/**
@@ -244,7 +244,7 @@ static int handleInstInstalledFiles(const rpmts ts,
fi->replaced = xcalloc(sharedCount, sizeof(*fi->replaced));
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
for (i = 0; i < sharedCount; i++, shared++) {
int otherFileNum, fileNum;
@@ -497,7 +497,7 @@ static void handleOverlappedFiles(const rpmts ts,
const char * fn;
int i, j;
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
fi = rpmfiInit(fi, 0);
if (fi != NULL)
while ((i = rpmfiNext(fi)) >= 0) {
@@ -692,7 +692,7 @@ static int ensureOlder(rpmts ts,
req = rpmdsFree(req);
if (rc == 0) {
- rpmps ps = rpmtsGetProblems(ts);
+ rpmps ps = rpmtsProblems(ts);
const char * altNEVR = hGetNEVR(h, NULL);
rpmpsAppend(ps, RPMPROB_OLDPACKAGE,
rpmteNEVR(p), rpmteKey(p),
@@ -907,18 +907,18 @@ static void skipFiles(const rpmts ts, rpmfi fi)
/**
* Return transaction element's file info.
* @todo Take a rpmfi refcount here.
- * @param tei transaction element iterator
+ * @param tsi transaction element iterator
* @return transaction element file info
*/
static /*@null@*/
-rpmfi rpmteiGetFi(const rpmtei tei)
+rpmfi rpmtsiFi(const rpmtsi tsi)
/*@*/
{
rpmfi fi = NULL;
- if (tei != NULL && tei->ocsave != -1) {
+ if (tsi != NULL && tsi->ocsave != -1) {
/*@-type -abstract@*/ /* FIX: rpmte not opaque */
- rpmte te = rpmtsElement(tei->ts, tei->ocsave);
+ rpmte te = rpmtsElement(tsi->ts, tsi->ocsave);
/*@-assignexpose@*/
if (te != NULL && (fi = te->fi) != NULL)
fi->te = te;
@@ -945,8 +945,8 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
fingerPrintCache fpc;
rpmps ps;
PSM_t psm = memset(alloca(sizeof(*psm)), 0, sizeof(*psm));
- rpmtei pi; rpmte p;
- rpmtei qi; rpmte q;
+ rpmtsi pi; rpmte p;
+ rpmtsi qi; rpmte q;
int xx;
/* FIXME: what if the same package is included in ts twice? */
@@ -989,14 +989,14 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
* For packages being removed:
* - count files.
*/
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
/* The ordering doesn't matter here */
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, TR_ADDED)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, TR_ADDED)) != NULL) {
rpmdbMatchIterator mi;
int fc;
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
fc = rpmfiFC(fi);
@@ -1044,21 +1044,21 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
totalFileCount += fc;
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
ps = rpmpsFree(ps);
/* The ordering doesn't matter here */
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, TR_REMOVED)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, TR_REMOVED)) != NULL) {
int fc;
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
fc = rpmfiFC(fi);
totalFileCount += fc;
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
/* ===============================================
* Initialize transaction element file info for package:
@@ -1069,15 +1069,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
* calling fpLookupList only once. I'm not sure that the speedup is
* worth the trouble though.
*/
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
int fc;
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
fc = rpmfiFC(fi);
-#ifdef DYING /* XXX W2DO? this is now done in rpmteiGetFi, okay ??? */
+#ifdef DYING /* XXX W2DO? this is now done in rpmtsiFi, okay ??? */
fi->magic = RPMFIMAGIC;
fi->te = p;
#endif
@@ -1098,7 +1098,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
fi->fps = (fc > 0 ? xmalloc(fc * sizeof(*fi->fps)) : NULL);
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
if (!rpmtsChrootDone(ts)) {
const char * rootDir = rpmtsRootDir(ts);
@@ -1116,11 +1116,11 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
/* ===============================================
* Add fingerprint for each file not skipped.
*/
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
int fc;
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
fc = rpmfiFC(fi);
@@ -1137,7 +1137,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
}
/*@=branchstate@*/
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_START, 6, ts->orderCount,
NULL, ts->notifyData));
@@ -1145,18 +1145,18 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
/* ===============================================
* Compute file disposition for each package in transaction set.
*/
- ps = rpmtsGetProblems(ts);
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
+ ps = rpmtsProblems(ts);
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
dbiIndexSet * matches;
int knownBad;
int fc;
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
fc = rpmfiFC(fi);
- NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_PROGRESS, rpmteiGetOc(pi),
+ NOTIFY(ts, (NULL, RPMCALLBACK_TRANS_PROGRESS, rpmtsiOc(pi),
ts->orderCount, NULL, ts->notifyData));
if (fc == 0) continue;
@@ -1187,14 +1187,14 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
int ro;
ro = dbiIndexRecordOffset(matches[i], j);
knownBad = 0;
- qi = rpmteiInit(ts);
- while ((q = rpmteiNext(qi, TR_REMOVED)) != NULL) {
+ qi = rpmtsiInit(ts);
+ while ((q = rpmtsiNext(qi, TR_REMOVED)) != NULL) {
if (ro == knownBad)
/*@innerbreak@*/ break;
if (rpmteDBOffset(q) == ro)
knownBad = ro;
}
- qi = rpmteiFree(qi);
+ qi = rpmtsiFree(qi);
shared->pkgFileNum = i;
shared->otherPkg = dbiIndexRecordOffset(matches[i], j);
@@ -1262,7 +1262,7 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
/*@switchbreak@*/ break;
}
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
ps = rpmpsFree(ps);
if (rpmtsChrootDone(ts)) {
@@ -1281,15 +1281,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
/* ===============================================
* Free unused memory as soon as possible.
*/
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
if (rpmfiFC(fi) == 0)
continue;
fi->fps = _free(fi->fps);
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
fpc = fpCacheFree(fpc);
ts->ht = htFree(ts->ht);
@@ -1311,9 +1311,9 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
* Save removed files before erasing.
*/
if (rpmtsFlags(ts) & (RPMTRANS_FLAG_DIRSTASH | RPMTRANS_FLAG_REPACKAGE)) {
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, 0)) != NULL) {
- fi = rpmteiGetFi(pi);
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
+ fi = rpmtsiFi(pi);
switch (rpmteType(p)) {
case TR_ADDED:
/*@switchbreak@*/ break;
@@ -1329,21 +1329,21 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet)
/*@switchbreak@*/ break;
}
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
}
/* ===============================================
* Install and remove packages.
*/
lastKey = (alKey)-2; /* erased packages have -1 */
- pi = rpmteiInit(ts);
+ pi = rpmtsiInit(ts);
/*@-branchstate@*/ /* FIX: fi reload needs work */
- while ((p = rpmteiNext(pi, 0)) != NULL) {
+ while ((p = rpmtsiNext(pi, 0)) != NULL) {
alKey pkgKey;
int gotfd;
gotfd = 0;
- if ((fi = rpmteiGetFi(pi)) == NULL)
+ if ((fi = rpmtsiFi(pi)) == NULL)
continue; /* XXX can't happen */
psm->te = p;
@@ -1448,7 +1448,7 @@ fi->actions = actions;
/*@=type@*/
}
/*@=branchstate@*/
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
psm->ts = rpmtsUnlink(psm->ts, "tsRun");
diff --git a/lib/ts.c b/lib/ts.c
index 86c6f2c81..f3ab1a46c 100644
--- a/lib/ts.c
+++ b/lib/ts.c
@@ -185,7 +185,7 @@ static int ftsPrint(FTS * ftsp, FTSENT * fts, rpmts ts)
indent * (fts->fts_level < 0 ? 0 : fts->fts_level), "",
n, v, r);
#ifdef NOTYET
- xx = rpmtsAddPackage(ts, h, fts->fts_path, 1, NULL);
+ xx = rpmtsAddInstallElement(ts, h, fts->fts_path, 1, NULL);
#endif
break;
@@ -374,7 +374,7 @@ if (!_debug) {
xx = rpmtsCheck(ts);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (ps) {
rpmMessage(RPMMESS_ERROR, _("Failed dependencies:\n"));
printDepProblems(stderr, ps);
diff --git a/lib/verify.c b/lib/verify.c
index 92d2fb233..8ae977ad8 100644
--- a/lib/verify.c
+++ b/lib/verify.c
@@ -357,10 +357,10 @@ static int verifyDependencies(/*@unused@*/ QVA_t qva, rpmts ts,
int i;
rpmtsClean(ts);
- (void) rpmtsAddPackage(ts, h, NULL, 0, NULL);
+ (void) rpmtsAddInstallElement(ts, h, NULL, 0, NULL);
xx = rpmtsCheck(ts);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
/*@-branchstate@*/
if (ps) {
diff --git a/python/Makefile.am b/python/Makefile.am
index 3c0757c5b..e4f434c65 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -14,7 +14,8 @@ INCLUDES = -I. \
@INCPATH@
noinst_HEADERS = db-py.h hash.h header-py.h \
- rpmal-py.h rpmds-py.h rpmfi-py.h rpmts-py.h upgrade.h
+ rpmal-py.h rpmds-py.h rpmfd-py.h rpmfi-py.h rpmte-py.h rpmts-py.h \
+ upgrade.h
mylibs= \
$(top_builddir)/lib/.libs/librpm.so \
@@ -35,7 +36,8 @@ poptmodule_so_LDFLAGS = $(mylibs) $(LIBS) -shared -Wl,-soname,poptmodule.so
noinst_LTLIBRARIES = librpmmodule.la
librpmmodule_la_SOURCES = rpmmodule.c hash.c upgrade.c \
- db-py.c header-py.c rpmal-py.c rpmds-py.c rpmfi-py.c rpmts-py.c
+ db-py.c header-py.c rpmal-py.c rpmds-py.c rpmfd-py.c rpmfi-py.c \
+ rpmte-py.c rpmts-py.c
rpmmodule.so$(EXEEXT): $(librpmmodule_la_OBJECTS)
$(CC) -o $@ $(librpmmodule_la_OBJECTS) $(rpmmodule_so_LDFLAGS)
diff --git a/python/Makefile.in b/python/Makefile.in
index 048f3cedc..083c8b3ed 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -209,7 +209,8 @@ INCLUDES = -I. \
noinst_HEADERS = db-py.h hash.h header-py.h \
- rpmal-py.h rpmds-py.h rpmfi-py.h rpmts-py.h upgrade.h
+ rpmal-py.h rpmds-py.h rpmfd-py.h rpmfi-py.h rpmte-py.h rpmts-py.h \
+ upgrade.h
mylibs = \
@@ -232,7 +233,8 @@ poptmodule_so_LDFLAGS = $(mylibs) $(LIBS) -shared -Wl,-soname,poptmodule.so
noinst_LTLIBRARIES = librpmmodule.la
librpmmodule_la_SOURCES = rpmmodule.c hash.c upgrade.c \
- db-py.c header-py.c rpmal-py.c rpmds-py.c rpmfi-py.c rpmts-py.c
+ db-py.c header-py.c rpmal-py.c rpmds-py.c rpmfd-py.c rpmfi-py.c \
+ rpmte-py.c rpmts-py.c
subdir = python
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -243,7 +245,8 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
librpmmodule_la_LDFLAGS =
librpmmodule_la_LIBADD =
am_librpmmodule_la_OBJECTS = rpmmodule.lo hash.lo upgrade.lo db-py.lo \
- header-py.lo rpmal-py.lo rpmds-py.lo rpmfi-py.lo rpmts-py.lo
+ header-py.lo rpmal-py.lo rpmds-py.lo rpmfd-py.lo rpmfi-py.lo \
+ rpmte-py.lo rpmts-py.lo
librpmmodule_la_OBJECTS = $(am_librpmmodule_la_OBJECTS)
python_PROGRAMS = rpmmodule.so$(EXEEXT) poptmodule.so$(EXEEXT)
PROGRAMS = $(python_PROGRAMS)
@@ -267,7 +270,8 @@ am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/db-py.Plo ./$(DEPDIR)/hash.Plo \
@AMDEP_TRUE@ ./$(DEPDIR)/header-py.Plo ./$(DEPDIR)/poptmodule.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/rpmal-py.Plo ./$(DEPDIR)/rpmds-py.Plo \
-@AMDEP_TRUE@ ./$(DEPDIR)/rpmfi-py.Plo ./$(DEPDIR)/rpmmodule.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/rpmfd-py.Plo ./$(DEPDIR)/rpmfi-py.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/rpmmodule.Plo ./$(DEPDIR)/rpmte-py.Plo \
@AMDEP_TRUE@ ./$(DEPDIR)/rpmts-py.Plo ./$(DEPDIR)/upgrade.Plo
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -338,8 +342,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poptmodule.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmal-py.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmds-py.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfd-py.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmfi-py.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmmodule.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmte-py.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmts-py.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upgrade.Plo@am__quote@
diff --git a/python/db-py.c b/python/db-py.c
index 4500c6d1f..ef0a2a608 100644
--- a/python/db-py.c
+++ b/python/db-py.c
@@ -52,7 +52,7 @@ rpmmi_Pattern(rpmmiObject * s, PyObject * args) {
PyObject *TagN = NULL;
int type;
char * pattern;
- int tag;
+ rpmTag tag;
if (!PyArg_ParseTuple(args, "Ois:Pattern", &TagN, &type, &pattern))
return NULL;
diff --git a/python/rpmfd-py.c b/python/rpmfd-py.c
new file mode 100644
index 000000000..610ce6e7e
--- /dev/null
+++ b/python/rpmfd-py.c
@@ -0,0 +1,215 @@
+/** \ingroup python
+ * \file python/rpmfd-py.c
+ */
+
+#include "system.h"
+
+#include "Python.h"
+
+#include <glob.h> /* XXX rpmio.h */
+#include <dirent.h> /* XXX rpmio.h */
+#include <rpmio_internal.h>
+#include <rpmlib.h> /* XXX _free */
+
+#include "header-py.h" /* XXX pyrpmError */
+#include "rpmfd-py.h"
+
+#include "debug.h"
+
+extern int _rpmio_debug;
+
+/** \ingroup python
+ * \name Class: rpm.fd
+ * \class rpm.fd
+ * \brief An python rpm.fd object represents an rpm I/O handle.
+ */
+
+static PyObject *
+rpmfd_Debug(rpmfdObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, "i", &_rpmio_debug)) return NULL;
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+/**
+ */
+typedef struct FDlist_t FDlist;
+
+/**
+ */
+struct FDlist_t {
+ FILE * f;
+ FD_t fd;
+ const char * note;
+ FDlist * next;
+} ;
+
+/**
+ */
+static FDlist *fdhead = NULL;
+
+/**
+ */
+static FDlist *fdtail = NULL;
+
+/**
+ */
+static int closeCallback(FILE * f)
+{
+ FDlist *node, *last;
+
+ node = fdhead;
+ last = NULL;
+ while (node) {
+ if (node->f == f)
+ break;
+ last = node;
+ node = node->next;
+ }
+ if (node) {
+ if (last)
+ last->next = node->next;
+ else
+ fdhead = node->next;
+ node->note = _free (node->note);
+ node->fd = fdLink(node->fd, "closeCallback");
+ Fclose (node->fd);
+ while (node->fd)
+ node->fd = fdFree(node->fd, "closeCallback");
+ node = _free (node);
+ }
+ return 0;
+}
+
+/**
+ */
+static PyObject *
+rpmfd_Fopen(PyObject * self, PyObject * args)
+{
+ char * path, * mode;
+ FDlist *node;
+
+ if (!PyArg_ParseTuple(args, "ss", &path, &mode))
+ return NULL;
+
+ node = xmalloc (sizeof(FDlist));
+
+ node->fd = Fopen(path, mode);
+ node->fd = fdLink(node->fd, "doFopen");
+ node->note = xstrdup (path);
+
+ if (!node->fd) {
+ PyErr_SetFromErrno(pyrpmError);
+ node = _free (node);
+ return NULL;
+ }
+
+ if (Ferror(node->fd)) {
+ const char *err = Fstrerror(node->fd);
+ node = _free(node);
+ if (err) {
+ PyErr_SetString(pyrpmError, err);
+ return NULL;
+ }
+ }
+ node->f = fdGetFp(node->fd);
+ if (!node->f) {
+ PyErr_SetString(pyrpmError, "FD_t has no FILE*");
+ free(node);
+ return NULL;
+ }
+
+ node->next = NULL;
+ if (!fdhead) {
+ fdhead = fdtail = node;
+ } else if (fdtail) {
+ fdtail->next = node;
+ } else {
+ fdhead = node;
+ }
+ fdtail = node;
+
+ return PyFile_FromFile (node->f, path, mode, closeCallback);
+}
+
+/** \ingroup python
+ */
+static struct PyMethodDef rpmfd_methods[] = {
+ {"Debug", (PyCFunction)rpmfd_Debug, METH_VARARGS,
+ NULL},
+ {"Fopen", (PyCFunction)rpmfd_Fopen, METH_VARARGS,
+ NULL},
+ {NULL, NULL} /* sentinel */
+};
+
+/* ---------- */
+
+/** \ingroup python
+ */
+static PyObject * rpmfd_getattr(rpmfdObject * o, char * name)
+{
+ return Py_FindMethod(rpmfd_methods, (PyObject *) o, name);
+}
+
+/**
+ */
+static char rpmfd_doc[] =
+"";
+
+/** \ingroup python
+ */
+PyTypeObject rpmfd_Type = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ "rpm.io", /* tp_name */
+ sizeof(rpmfdObject), /* tp_size */
+ 0, /* tp_itemsize */
+ (destructor)0, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc) rpmfd_getattr, /* tp_getattr */
+ (setattrfunc)0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ rpmfd_doc, /* tp_doc */
+#if Py_TPFLAGS_HAVE_ITER
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ rpmfd_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+#endif
+};
+
+rpmfdObject * rpmfd_Wrap(FD_t fd)
+{
+ rpmfdObject *s = PyObject_NEW(rpmfdObject, &rpmfd_Type);
+ if (s == NULL)
+ return NULL;
+ s->fd = fd;
+ return s;
+}
diff --git a/python/rpmfd-py.h b/python/rpmfd-py.h
new file mode 100644
index 000000000..eed1dccc4
--- /dev/null
+++ b/python/rpmfd-py.h
@@ -0,0 +1,17 @@
+#ifndef H_RPMFD_PY
+#define H_RPMFD_PY
+
+/** \ingroup python
+ * \file python/rpmfd-py.h
+ */
+
+typedef struct rpmfdObject_s {
+ PyObject_HEAD
+ FD_t fd;
+} rpmfdObject;
+
+extern PyTypeObject rpmfd_Type;
+
+rpmfdObject * rpmfd_Wrap(FD_t fd);
+
+#endif
diff --git a/python/rpmmodule.c b/python/rpmmodule.c
index 864c43c82..052a44b50 100644
--- a/python/rpmmodule.c
+++ b/python/rpmmodule.c
@@ -4,25 +4,13 @@
#include "system.h"
-#include <alloca.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <time.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <glob.h> /* XXX rpmio.h */
-#include <dirent.h> /* XXX rpmio.h */
-#include <locale.h>
-#include <time.h>
-
#include "Python.h"
-#include "rpmio_internal.h"
#include "rpmcli.h" /* XXX for rpmCheckSig */
#include "rpmdb.h"
#include "rpmps.h"
+#include "rpmte.h"
#define _RPMTS_INTERNAL /* XXX for ts->rdb */
#include "rpmts.h"
@@ -35,13 +23,13 @@
#include "header-py.h"
#include "rpmal-py.h"
#include "rpmds-py.h"
+#include "rpmfd-py.h"
#include "rpmfi-py.h"
+#include "rpmte-py.h"
#include "rpmts-py.h"
#include "debug.h"
-extern int _rpmio_debug;
-
#ifdef __LCLINT__
#undef PyObject_HEAD
#define PyObject_HEAD int _PyObjectHead
@@ -360,110 +348,6 @@ static PyObject * setVerbosity (PyObject * self, PyObject * args)
/**
*/
-typedef struct FDlist_t FDlist;
-
-/**
- */
-struct FDlist_t {
- FILE *f;
- FD_t fd;
- char *note;
- FDlist *next;
-} ;
-
-/**
- */
-static FDlist *fdhead = NULL;
-
-/**
- */
-static FDlist *fdtail = NULL;
-
-/**
- */
-static int closeCallback(FILE * f)
-{
- FDlist *node, *last;
-
- printf ("close callback on %p\n", f);
-
- node = fdhead;
- last = NULL;
- while (node) {
- if (node->f == f)
- break;
- last = node;
- node = node->next;
- }
- if (node) {
- if (last)
- last->next = node->next;
- else
- fdhead = node->next;
- printf ("closing %s %p\n", node->note, node->fd);
- free (node->note);
- node->fd = fdLink(node->fd, "closeCallback");
- Fclose (node->fd);
- while (node->fd)
- node->fd = fdFree(node->fd, "closeCallback");
- free (node);
- }
- return 0;
-}
-
-/**
- */
-static PyObject * doFopen(PyObject * self, PyObject * args)
-{
- char * path, * mode;
- FDlist *node;
-
- if (!PyArg_ParseTuple(args, "ss", &path, &mode))
- return NULL;
-
- node = malloc (sizeof(FDlist));
-
- node->fd = Fopen(path, mode);
- node->fd = fdLink(node->fd, "doFopen");
- node->note = strdup (path);
-
- if (!node->fd) {
- PyErr_SetFromErrno(pyrpmError);
- free (node);
- return NULL;
- }
-
- if (Ferror(node->fd)) {
- const char *err = Fstrerror(node->fd);
- free(node);
- if (err) {
- PyErr_SetString(pyrpmError, err);
- return NULL;
- }
- }
- node->f = fdGetFp(node->fd);
- printf ("opening %s fd = %p f = %p\n", node->note, node->fd, node->f);
- if (!node->f) {
- PyErr_SetString(pyrpmError, "FD_t has no FILE*");
- free(node);
- return NULL;
- }
-
- node->next = NULL;
- if (!fdhead) {
- fdhead = fdtail = node;
- } else if (fdtail) {
- fdtail->next = node;
- } else {
- fdhead = node;
- }
- fdtail = node;
-
- return PyFile_FromFile (node->f, path, mode, closeCallback);
-}
-
-/**
- */
static PyMethodDef rpmModuleMethods[] = {
{ "TransactionSet", (PyCFunction) rpmts_Create, METH_VARARGS,
"rpm.TransactionSet([rootDir, [db]]) -> ts\n\
@@ -504,8 +388,6 @@ static PyMethodDef rpmModuleMethods[] = {
NULL },
{ "checksig", (PyCFunction) checkSig, METH_VARARGS,
NULL },
- { "Fopen", (PyCFunction) doFopen, METH_VARARGS,
- NULL },
{ "setVerbosity", (PyCFunction) setVerbosity, METH_VARARGS,
NULL },
{ "dsSingle", (PyCFunction) rpmds_Single, METH_VARARGS,
@@ -555,6 +437,10 @@ void initrpm(void)
Py_INCREF(&rpmds_Type);
PyModule_AddObject(m, "ds", (PyObject *) &rpmds_Type);
+ rpmfd_Type.ob_type = &PyType_Type;
+ Py_INCREF(&rpmfd_Type);
+ PyModule_AddObject(m, "fd", (PyObject *) &rpmfd_Type);
+
rpmfi_Type.ob_type = &PyType_Type;
Py_INCREF(&rpmfi_Type);
PyModule_AddObject(m, "fi", (PyObject *) &rpmfi_Type);
@@ -567,6 +453,10 @@ void initrpm(void)
Py_INCREF(&rpmmi_Type);
PyModule_AddObject(m, "mi", (PyObject *) &rpmmi_Type);
+ rpmte_Type.ob_type = &PyType_Type;
+ Py_INCREF(&rpmte_Type);
+ PyModule_AddObject(m, "te", (PyObject *) &rpmte_Type);
+
rpmts_Type.ob_type = &PyType_Type;
Py_INCREF(&rpmts_Type);
PyModule_AddObject(m, "ts", (PyObject *) &rpmts_Type);
@@ -686,14 +576,8 @@ void initrpm(void)
REGISTER_ENUM(RPMPROB_DISKNODES);
REGISTER_ENUM(RPMPROB_BADPRETRANS);
-#ifdef DEAD
- REGISTER_ENUM(CHECKSIG_PGP); /* XXX use VERIFY_SIGNATURE */
- REGISTER_ENUM(CHECKSIG_GPG); /* XXX use VERIFY_SIGNATURE */
- REGISTER_ENUM(CHECKSIG_MD5); /* XXX use VERIFY_DIGEST */
-#else
REGISTER_ENUM(VERIFY_DIGEST);
REGISTER_ENUM(VERIFY_SIGNATURE);
-#endif
REGISTER_ENUM(RPMLOG_EMERG);
REGISTER_ENUM(RPMLOG_ALERT);
@@ -709,6 +593,8 @@ void initrpm(void)
REGISTER_ENUM(RPMMIRE_REGEX);
REGISTER_ENUM(RPMMIRE_GLOB);
+ PyDict_SetItemString(d, "RPMAL_NOMATCH", o=PyInt_FromLong( (long)RPMAL_NOMATCH ));
+ Py_DECREF(o);
}
/*@}*/
diff --git a/python/rpmte-py.c b/python/rpmte-py.c
new file mode 100644
index 000000000..8a7f8b655
--- /dev/null
+++ b/python/rpmte-py.c
@@ -0,0 +1,272 @@
+/** \ingroup python
+ * \file python/rpmte-py.c
+ */
+
+#include "system.h"
+
+#include "Python.h"
+
+#include <rpmlib.h>
+#include "rpmps.h"
+
+#include "rpmds.h"
+#include "rpmfi.h"
+#include "rpmte.h"
+
+#include "header-py.h" /* XXX tagNumFromPyObject */
+#include "rpmds-py.h"
+#include "rpmfi-py.h"
+#include "rpmte-py.h"
+
+#include "debug.h"
+
+/** \ingroup python
+ * \name Class: rpm.te
+ * \class rpm.te
+ * \brief An python rpm.te object represents an element of a RPM transaction set.
+ */
+
+static PyObject *
+rpmte_Debug(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, "i", &_rpmte_debug)) return NULL;
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject *
+rpmte_N(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":N")) return NULL;
+ return Py_BuildValue("s", rpmteN(s->te));
+}
+
+static PyObject *
+rpmte_E(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":E")) return NULL;
+ return Py_BuildValue("s", rpmteE(s->te));
+}
+
+static PyObject *
+rpmte_V(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":V")) return NULL;
+ return Py_BuildValue("s", rpmteV(s->te));
+}
+
+static PyObject *
+rpmte_R(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":R")) return NULL;
+ return Py_BuildValue("s", rpmteR(s->te));
+}
+
+static PyObject *
+rpmte_A(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":A")) return NULL;
+ return Py_BuildValue("s", rpmteA(s->te));
+}
+
+static PyObject *
+rpmte_O(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":O")) return NULL;
+ return Py_BuildValue("s", rpmteO(s->te));
+}
+
+static PyObject *
+rpmte_NEVR(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":NEVR")) return NULL;
+ return Py_BuildValue("s", rpmteNEVR(s->te));
+}
+
+static PyObject *
+rpmte_MultiLib(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":MultiLib")) return NULL;
+ return Py_BuildValue("i", rpmteMultiLib(s->te));
+}
+
+static PyObject *
+rpmte_Depth(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":Depth")) return NULL;
+ return Py_BuildValue("i", rpmteDepth(s->te));
+}
+
+static PyObject *
+rpmte_Npreds(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":Npreds")) return NULL;
+ return Py_BuildValue("i", rpmteNpreds(s->te));
+}
+
+static PyObject *
+rpmte_Degree(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":Degree")) return NULL;
+ return Py_BuildValue("i", rpmteDegree(s->te));
+}
+
+static PyObject *
+rpmte_AddedKey(rpmteObject * s, PyObject * args)
+{
+ if (!PyArg_ParseTuple(args, ":Degree")) return NULL;
+ return Py_BuildValue("i", rpmteDegree(s->te));
+}
+
+static PyObject *
+rpmte_DS(rpmteObject * s, PyObject * args)
+{
+ PyObject * TagN = NULL;
+ rpmds ds;
+ rpmTag tag;
+
+ if (!PyArg_ParseTuple(args, "O:DS", &TagN)) return NULL;
+
+ tag = tagNumFromPyObject(TagN);
+ if (tag == -1) {
+ PyErr_SetString(PyExc_TypeError, "unknown tag type");
+ return NULL;
+ }
+
+ ds = rpmteDS(s->te, tag);
+ if (ds == NULL) {
+ PyErr_SetString(PyExc_TypeError, "invalid ds tag");
+ return NULL;
+ }
+ return (PyObject *) rpmds_Wrap(ds);
+}
+
+static PyObject *
+rpmte_FI(rpmteObject * s, PyObject * args)
+{
+ PyObject * TagN = NULL;
+ rpmfi fi;
+ rpmTag tag;
+
+ if (!PyArg_ParseTuple(args, "O:FI", &TagN)) return NULL;
+
+ tag = tagNumFromPyObject(TagN);
+ if (tag == -1) {
+ PyErr_SetString(PyExc_TypeError, "unknown tag type");
+ return NULL;
+ }
+
+ fi = rpmteFI(s->te, tag);
+ if (fi == NULL) {
+ PyErr_SetString(PyExc_TypeError, "invalid fi tag");
+ return NULL;
+ }
+ return (PyObject *) rpmfi_Wrap(fi);
+}
+
+/** \ingroup python
+ */
+static struct PyMethodDef rpmte_methods[] = {
+ {"Debug", (PyCFunction)rpmte_Debug, METH_VARARGS,
+ NULL},
+ {"N", (PyCFunction)rpmte_N, METH_VARARGS,
+ NULL},
+ {"E", (PyCFunction)rpmte_E, METH_VARARGS,
+ NULL},
+ {"V", (PyCFunction)rpmte_V, METH_VARARGS,
+ NULL},
+ {"R", (PyCFunction)rpmte_R, METH_VARARGS,
+ NULL},
+ {"A", (PyCFunction)rpmte_A, METH_VARARGS,
+ NULL},
+ {"O", (PyCFunction)rpmte_O, METH_VARARGS,
+ NULL},
+ {"NEVR", (PyCFunction)rpmte_NEVR, METH_VARARGS,
+ NULL},
+ {"MultiLib",(PyCFunction)rpmte_MultiLib, METH_VARARGS,
+ NULL},
+ {"Depth", (PyCFunction)rpmte_Depth, METH_VARARGS,
+ NULL},
+ {"Npreds", (PyCFunction)rpmte_Npreds, METH_VARARGS,
+ NULL},
+ {"Degree", (PyCFunction)rpmte_Degree, METH_VARARGS,
+ NULL},
+ {"AddedKey",(PyCFunction)rpmte_AddedKey, METH_VARARGS,
+ NULL},
+ {"DS", (PyCFunction)rpmte_DS, METH_VARARGS,
+ NULL},
+ {"FI", (PyCFunction)rpmte_FI, METH_VARARGS,
+ NULL},
+ {NULL, NULL} /* sentinel */
+};
+
+/* ---------- */
+
+/** \ingroup python
+ */
+static PyObject * rpmte_getattr(rpmteObject * o, char * name)
+{
+ return Py_FindMethod(rpmte_methods, (PyObject *) o, name);
+}
+
+/**
+ */
+static char rpmte_doc[] =
+"";
+
+/** \ingroup python
+ */
+PyTypeObject rpmte_Type = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ "rpm.te", /* tp_name */
+ sizeof(rpmteObject), /* tp_size */
+ 0, /* tp_itemsize */
+ (destructor)0, /* tp_dealloc */
+ 0, /* tp_print */
+ (getattrfunc) rpmte_getattr, /* tp_getattr */
+ (setattrfunc)0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ rpmte_doc, /* tp_doc */
+#if Py_TPFLAGS_HAVE_ITER
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ rpmte_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ 0, /* tp_new */
+ 0, /* tp_free */
+ 0, /* tp_is_gc */
+#endif
+};
+
+rpmteObject * rpmte_Wrap(rpmte te)
+{
+ rpmteObject *s = PyObject_NEW(rpmteObject, &rpmte_Type);
+ if (s == NULL)
+ return NULL;
+ s->te = te;
+ return s;
+}
diff --git a/python/rpmte-py.h b/python/rpmte-py.h
new file mode 100644
index 000000000..93ca05e2a
--- /dev/null
+++ b/python/rpmte-py.h
@@ -0,0 +1,17 @@
+#ifndef H_RPMTE_PY
+#define H_RPMTE_PY
+
+/** \ingroup python
+ * \file python/rpmte-py.h
+ */
+
+typedef struct rpmteObject_s {
+ PyObject_HEAD
+ rpmte te;
+} rpmteObject;
+
+extern PyTypeObject rpmte_Type;
+
+rpmteObject * rpmte_Wrap(rpmte te);
+
+#endif
diff --git a/python/rpmts-py.c b/python/rpmts-py.c
index 6acf1ccea..07b8e8a0a 100644
--- a/python/rpmts-py.c
+++ b/python/rpmts-py.c
@@ -1,19 +1,26 @@
/** \ingroup python
- * \file python/rpmmodule.c
+ * \file python/rpmts-py.c
*/
#include "system.h"
#include "Python.h"
+#include <rpmlib.h>
#include "rpmdb.h"
#include "rpmps.h"
-#define _RPMTS_INTERNAL /* XXX for ts->rdb */
+#include "rpmal.h"
+#include "rpmds.h"
+#include "rpmfi.h"
+#include "rpmte.h"
+
+#define _RPMTS_INTERNAL /* XXX for ts->rdb, ts->availablePackage */
#include "rpmts.h"
#include "db-py.h"
#include "header-py.h"
+#include "rpmte-py.h"
#include "rpmts-py.h"
#include "debug.h"
@@ -33,8 +40,8 @@
*
* A rpm.ts object has the following methods:
*
- * - add(header,data,mode) Add a binary package to a transaction set.
- * @param header the header to be added
+ * - addInstall(hdr,data,mode) Add an install element to a transaction set.
+ * @param hdr the header to be added
* @param data user data that will be passed to the transaction callback
* during transaction execution
* @param mode optional argument that specifies if this package should
@@ -43,13 +50,13 @@
* dependencies but no action should be performed with it
* ('a').
*
- * - remove
+ * - addErase(name) Add an erase element to a transaction set.
+ * @param name the package name to be erased
*
- * - depcheck() Perform a dependency and conflict check on the
- * transaction set. After headers have been added to a
- * transaction set, a dependency check can be performed
- * to make sure that all package dependencies are
- * satisfied.
+ * - check() Perform a dependency check on the transaction set. After
+ * headers have been added to a transaction set, a dependency
+ * check can be performed to make sure that all package
+ * dependencies are satisfied.
* @return None If there are no unresolved dependencies
* Otherwise a list of complex tuples is returned, one tuple per
* unresolved dependency, with
@@ -82,6 +89,9 @@
* rpm.RPMDEP_SENSE_REQUIRES are set to show a dependency as a
* requirement or a conflict.
*
+ * - order() Do a topological sort of added element relations.
+ * @return None
+ *
* - run(flags,problemSetFilter,callback,data) Attempt to execute a
* transaction set. After the transaction set has been populated
* with install and upgrade actions, it can be executed by invoking
@@ -116,10 +126,31 @@
* - rpm.RPMPROB_FILTER_DISKSPACE -
*/
+/**
+ * Add package to universe of possible packages to install in transaction set.
+ * @param ts transaction set
+ * @param h header
+ * @param key package private data
+ */
+static void rpmtsAddAvailableElement(rpmts ts, Header h,
+ /*@exposed@*/ /*@null@*/ fnpyKey key)
+ /*@modifies h, ts @*/
+{
+ int scareMem = 0;
+ rpmds provides = rpmdsNew(h, RPMTAG_PROVIDENAME, scareMem);
+ rpmfi fi = rpmfiNew(ts, NULL, h, RPMTAG_BASENAMES, scareMem);
+
+ /* XXX FIXME: return code RPMAL_NOMATCH is error */
+ (void) rpmalAdd(&ts->availablePackages, RPMAL_NOMATCH, key,
+ provides, fi);
+ fi = rpmfiFree(fi, 1);
+ provides = rpmdsFree(provides);
+}
+
/** \ingroup python
*/
static PyObject *
-rpmts_Add(rpmtsObject * s, PyObject * args)
+rpmts_AddInstall(rpmtsObject * s, PyObject * args)
{
hdrObject * h;
PyObject * key;
@@ -145,9 +176,9 @@ rpmts_Add(rpmtsObject * s, PyObject * args)
isUpgrade = 1;
if (how && !strcmp(how, "a"))
- rpmtsAvailablePackage(s->ts, hdrGetHeader(h), key);
+ rpmtsAddAvailableElement(s->ts, hdrGetHeader(h), key);
else
- rpmtsAddPackage(s->ts, hdrGetHeader(h), key, isUpgrade, NULL);
+ rpmtsAddInstallElement(s->ts, hdrGetHeader(h), key, isUpgrade, NULL);
/* This should increment the usage count for me */
if (key) {
@@ -161,7 +192,7 @@ rpmts_Add(rpmtsObject * s, PyObject * args)
/** \ingroup python
*/
static PyObject *
-rpmts_Remove(rpmtsObject * s, PyObject * args)
+rpmts_AddErase(rpmtsObject * s, PyObject * args)
{
char * name;
int count;
@@ -181,7 +212,7 @@ rpmts_Remove(rpmtsObject * s, PyObject * args)
while ((h = rpmdbNextIterator(mi)) != NULL) {
unsigned int recOffset = rpmdbGetIteratorOffset(mi);
if (recOffset) {
- rpmtsRemovePackage(s->ts, h, recOffset);
+ rpmtsAddEraseElement(s->ts, h, recOffset);
}
}
}
@@ -206,7 +237,7 @@ rpmts_Check(rpmtsObject * s, PyObject * args)
if (!PyArg_ParseTuple(args, "|i:Check", &allSuggestions)) return NULL;
xx = rpmtsCheck(s->ts);
- ps = rpmtsGetProblems(s->ts);
+ ps = rpmtsProblems(s->ts);
if (ps) {
list = PyList_New(0);
@@ -395,7 +426,7 @@ static PyObject * rpmts_Run(rpmtsObject * s, PyObject * args)
(void) rpmtsSetFlags(s->ts, flags);
rc = rpmtsRun(s->ts, NULL, ignoreSet);
- ps = rpmtsGetProblems(s->ts);
+ ps = rpmtsProblems(s->ts);
if (cbInfo.pythonError) {
ps = rpmpsFree(ps);
@@ -426,14 +457,44 @@ static PyObject * rpmts_Run(rpmtsObject * s, PyObject * args)
return list;
}
+#if Py_TPFLAGS_HAVE_ITER
+static PyObject *
+rpmts_Next(rpmtsObject * s)
+{
+ rpmte te;
+
+ if (s == NULL || s->tsi == NULL)
+ return NULL;
+
+ te = rpmtsiNext(s->tsi, s->tsiFilter);
+ if (te == NULL) {
+ s->tsi = rpmtsiFree(s->tsi);
+ s->tsiFilter = 0;
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+
+ return (PyObject *) rpmte_Wrap(te);
+}
+
+static PyObject *
+rpmts_Iter(rpmtsObject * s)
+{
+ s->tsi = rpmtsiInit(s->ts);
+ s->tsiFilter = 0;
+ Py_INCREF(s);
+ return (PyObject *) s;
+}
+#endif
+
/** \ingroup python
*/
static struct PyMethodDef rpmts_methods[] = {
- {"add", (PyCFunction) rpmts_Add, METH_VARARGS,
+ {"addInstall", (PyCFunction) rpmts_AddInstall, METH_VARARGS,
NULL },
- {"remove", (PyCFunction) rpmts_Remove, METH_VARARGS,
+ {"addErase", (PyCFunction) rpmts_AddErase, METH_VARARGS,
NULL },
- {"depcheck", (PyCFunction) rpmts_Check, METH_VARARGS,
+ {"check", (PyCFunction) rpmts_Check, METH_VARARGS,
NULL },
{"order", (PyCFunction) rpmts_Order, METH_VARARGS,
NULL },
@@ -441,7 +502,13 @@ static struct PyMethodDef rpmts_methods[] = {
NULL },
{"run", (PyCFunction) rpmts_Run, METH_VARARGS,
NULL },
- {NULL, NULL} /* sentinel */
+#if Py_TPFLAGS_HAVE_ITER
+ {"next", (PyCFunction)rpmts_Next, METH_VARARGS,
+ NULL},
+ {"iter", (PyCFunction)rpmts_Iter, METH_VARARGS,
+ NULL},
+#endif
+ {NULL, NULL} /* sentinel */
};
/** \ingroup python
@@ -527,8 +594,8 @@ PyTypeObject rpmts_Type = {
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
+ (getiterfunc)rpmts_Iter, /* tp_iter */
+ (iternextfunc)rpmts_Next, /* tp_iternext */
rpmts_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
diff --git a/python/rpmts-py.h b/python/rpmts-py.h
index 59f1c6650..6873c7256 100644
--- a/python/rpmts-py.h
+++ b/python/rpmts-py.h
@@ -11,6 +11,8 @@ typedef struct rpmtsObject_s {
rpmdbObject * dbo;
PyObject * keyList; /* keeps reference counts correct */
FD_t scriptFd;
+ rpmtsi tsi;
+ rpmElementType tsiFilter;
} rpmtsObject;
extern PyTypeObject rpmts_Type;
diff --git a/tools/rpmsort.c b/tools/rpmsort.c
index 18724cc2e..46bf650f4 100644
--- a/tools/rpmsort.c
+++ b/tools/rpmsort.c
@@ -45,7 +45,6 @@ static inline /*@observer@*/ const char * const identifyDepend(int_32 f)
static int
do_tsort(const char *fileArgv[])
{
- const char * rootdir = "/";
rpmts ts = NULL;
const char ** pkgURL = NULL;
char * pkgState = NULL;
@@ -77,10 +76,12 @@ do_tsort(const char *fileArgv[])
goto exit;
}
+#ifdef DYING
/* Load all the available packages. */
if (!(noDeps || noAvailable)) {
rpmdbMatchIterator mi = NULL;
struct rpmdb_s * avdb = NULL;
+ const char * rootdir = "/";
addMacro(NULL, "_dbpath", NULL, avdbpath, RMIL_CMDLINE);
rc = rpmdbOpen(rootdir, &avdb, O_RDONLY, 0644);
@@ -98,6 +99,7 @@ endavail:
if (mi) rpmdbFreeIterator(mi);
if (avdb) rpmdbClose(avdb);
}
+#endif
/* Build fully globbed list of arguments in argv[argc]. */
for (fnp = fileArgv; *fnp; fnp++) {
@@ -170,7 +172,7 @@ restart:
}
if (rc == 0) {
- rc = rpmtsAddPackage(ts, h, (fnpyKey)fileName, 0, NULL);
+ rc = rpmtsAddInstallElement(ts, h, (fnpyKey)fileName, 0, NULL);
headerFree(h, "do_tsort");
continue;
}
@@ -215,7 +217,7 @@ restart:
rc = rpmtsCheck(ts);
- ps = rpmtsGetProblems(ts);
+ ps = rpmtsProblems(ts);
if (ps) {
rpmMessage(RPMMESS_ERROR, _("Failed dependencies:\n"));
printDepProblems(stderr, ps);
@@ -230,7 +232,7 @@ restart:
if (rc)
goto exit;
- { rpmtei pi;
+ { rpmtsi pi;
rpmte p;
rpmte q;
unsigned char * selected =
@@ -242,8 +244,8 @@ fprintf(stdout, "digraph XXX {\n");
fprintf(stdout, " rankdir=LR\n");
fprintf(stdout, "//===== Packages:\n");
- pi = rpmteiInit(ts);
- while ((p = rpmteiNext(pi, oType)) != NULL) {
+ pi = rpmtsiInit(ts);
+ while ((p = rpmtsiNext(pi, oType)) != NULL) {
fprintf(stdout, "//%5d%5d %s\n", rpmteTree(p), rpmteDepth(p), rpmteN(p));
q = rpmteParent(p);
if (q != NULL)
@@ -253,7 +255,7 @@ fprintf(stdout, " \"%s\"\n", rpmteN(p));
fprintf(stdout, " { rank=max ; \"%s\" }\n", rpmteN(p));
}
}
- pi = rpmteiFree(pi);
+ pi = rpmtsiFree(pi);
fprintf(stdout, "}\n");