Do tsort on transactionElement's, not availaiblePackage's.
CVS patchset: 5145 CVS date: 2001/10/31 22:19:42
This commit is contained in:
parent
a15e74ecd6
commit
df89c3d200
393
lib/depends.c
393
lib/depends.c
|
@ -19,7 +19,7 @@
|
|||
/*@access Header@*/ /* XXX compared with NULL */
|
||||
/*@access FD_t@*/ /* XXX compared with NULL */
|
||||
/*@access rpmdb@*/ /* XXX compared with NULL */
|
||||
/*@access rpmdbMatchIterator@*/ /* XXX compared with NULL */
|
||||
/*@access rpmdbMatchIterator@*/ /* XXX compared with NULL */
|
||||
/*@access rpmTransactionSet@*/
|
||||
|
||||
/*@access rpmDepSet@*/
|
||||
|
@ -29,16 +29,15 @@
|
|||
/*@access orderListIndex@*/
|
||||
/*@access tsortInfo@*/
|
||||
|
||||
#ifndef DYING
|
||||
/*@access availablePackage@*/
|
||||
#endif
|
||||
|
||||
/*@unchecked@*/
|
||||
static int _cacheDependsRC = 1;
|
||||
|
||||
/*@unchecked@*/
|
||||
int _ts_debug = 0;
|
||||
|
||||
/*@unchecked@*/
|
||||
static int _te_debug = 0;
|
||||
|
||||
/**
|
||||
* Return formatted dependency string.
|
||||
* @param depend type of dependency ("R" == Requires, "C" == Conflcts)
|
||||
|
@ -529,8 +528,10 @@ int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
|
|||
if ((p = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
|
||||
/*@-type@*/ /* FIX: availablePackage excision */
|
||||
if (strcmp(p->name, name))
|
||||
continue;
|
||||
/*@=type@*/
|
||||
pkgNVR = alGetNVR(ts->addedPackages, i);
|
||||
if (pkgNVR == NULL) /* XXX can't happen */
|
||||
continue;
|
||||
|
@ -609,9 +610,11 @@ int rpmtransAddPackage(rpmTransactionSet ts, Header h, FD_t fd,
|
|||
if (oldmultiLibMask && multiLibMask
|
||||
&& !(oldmultiLibMask & multiLibMask))
|
||||
{
|
||||
/*@-type@*/ /* FIX: availablePackage excision */
|
||||
availablePackage alp = alGetPkg(ts->addedPackages, alNum);
|
||||
if (alp != NULL)
|
||||
alp->multiLib = multiLibMask;
|
||||
/*@=type@*/
|
||||
}
|
||||
}
|
||||
/*@=branchstate@*/
|
||||
|
@ -840,7 +843,7 @@ static int unsatisfiedDepend(rpmTransactionSet ts,
|
|||
goto unsatisfied;
|
||||
}
|
||||
|
||||
if (alSatisfiesDepend(ts->addedPackages, keyType, keyDepend, key) != NULL)
|
||||
if (alSatisfiesDepend(ts->addedPackages, keyType, keyDepend, key) != -1L)
|
||||
{
|
||||
goto exit;
|
||||
}
|
||||
|
@ -1011,8 +1014,10 @@ static int checkPackageDeps(rpmTransactionSet ts, problemsSet psp,
|
|||
{};
|
||||
pp->suggestedPackages =
|
||||
xmalloc( (j + 1) * sizeof(*pp->suggestedPackages) );
|
||||
/*@-type@*/ /* FIX: availablePackage excision */
|
||||
for (j = 0; suggestion[j] != NULL; j++)
|
||||
pp->suggestedPackages[j] = suggestion[j]->key;
|
||||
/*@=type@*/
|
||||
pp->suggestedPackages[j] = NULL;
|
||||
} else {
|
||||
pp->suggestedPackages = NULL;
|
||||
|
@ -1213,17 +1218,19 @@ static struct badDeps_s {
|
|||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static int ignoreDep(const availablePackage p,
|
||||
const availablePackage q)
|
||||
static int ignoreDep(const transactionElement p,
|
||||
const transactionElement q)
|
||||
/*@*/
|
||||
{
|
||||
struct badDeps_s * bdp = badDeps;
|
||||
|
||||
/*@-nullpass@*/ /* FIX: {p,q}->name may be NULL. */
|
||||
while (bdp->pname != NULL && bdp->qname != NULL) {
|
||||
if (!strcmp(p->name, bdp->pname) && !strcmp(q->name, bdp->qname))
|
||||
return 1;
|
||||
bdp++;
|
||||
}
|
||||
/*@=nullpass@*/
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -1233,23 +1240,25 @@ static int ignoreDep(const availablePackage p,
|
|||
* @param tsi successor chain
|
||||
* @param q predecessor
|
||||
*/
|
||||
static void markLoop(/*@special@*/ tsortInfo tsi, availablePackage q)
|
||||
static void markLoop(/*@special@*/ tsortInfo tsi, transactionElement q)
|
||||
/*@globals internalState @*/
|
||||
/*@uses tsi @*/
|
||||
/*@modifies internalState @*/
|
||||
{
|
||||
availablePackage p;
|
||||
transactionElement p;
|
||||
|
||||
/*@-branchstate@*/ /* FIX: q is kept */
|
||||
while (tsi != NULL && (p = tsi->tsi_suc) != NULL) {
|
||||
tsi = tsi->tsi_next;
|
||||
if (p->tsi.tsi_pkg != NULL)
|
||||
if (p->tsi.tsi_chain != NULL)
|
||||
continue;
|
||||
/*@-assignexpose@*/
|
||||
p->tsi.tsi_pkg = q;
|
||||
/*@=assignexpose@*/
|
||||
/*@-assignexpose -temptrans@*/
|
||||
p->tsi.tsi_chain = q;
|
||||
/*@=assignexpose =temptrans@*/
|
||||
if (p->tsi.tsi_next != NULL)
|
||||
markLoop(p->tsi.tsi_next, p);
|
||||
}
|
||||
/*@=branchstate@*/
|
||||
}
|
||||
|
||||
static inline /*@observer@*/ const char * const identifyDepend(int_32 f)
|
||||
|
@ -1285,7 +1294,7 @@ static inline /*@observer@*/ const char * const identifyDepend(int_32 f)
|
|||
* @return (possibly NULL) formatted "q <- p" releation (malloc'ed)
|
||||
*/
|
||||
static /*@owned@*/ /*@null@*/ const char *
|
||||
zapRelation(availablePackage q, availablePackage p, rpmDepSet requires,
|
||||
zapRelation(transactionElement q, transactionElement p, rpmDepSet requires,
|
||||
int zap, /*@in@*/ /*@out@*/ int * nzaps)
|
||||
/*@modifies q, p, *nzaps, requires @*/
|
||||
{
|
||||
|
@ -1305,7 +1314,7 @@ zapRelation(availablePackage q, availablePackage p, rpmDepSet requires,
|
|||
|
||||
if (requires->N == NULL) continue; /* XXX can't happen */
|
||||
if (requires->EVR == NULL) continue; /* XXX can't happen */
|
||||
if (requires->Flags == NULL) continue;/* XXX can't happen */
|
||||
if (requires->Flags == NULL) continue; /* XXX can't happen */
|
||||
|
||||
requires->i = tsi->tsi_reqx; /* XXX hack */
|
||||
dp = printDepend( identifyDepend(requires->Flags[requires->i]), requires);
|
||||
|
@ -1316,8 +1325,8 @@ zapRelation(availablePackage q, availablePackage p, rpmDepSet requires,
|
|||
/*@-branchstate@*/
|
||||
if (zap && !(requires->Flags[requires->i] & RPMSENSE_PREREQ)) {
|
||||
rpmMessage(RPMMESS_DEBUG,
|
||||
_("removing %s-%s-%s \"%s\" from tsort relations.\n"),
|
||||
p->name, p->version, p->release, dp);
|
||||
_("removing %s \"%s\" from tsort relations.\n"),
|
||||
(p->NEVR ? p->NEVR : "???"), dp);
|
||||
p->tsi.tsi_count--;
|
||||
if (tsi_prev) tsi_prev->tsi_next = tsi->tsi_next;
|
||||
tsi->tsi_next = NULL;
|
||||
|
@ -1335,6 +1344,18 @@ zapRelation(availablePackage q, availablePackage p, rpmDepSet requires,
|
|||
return dp;
|
||||
}
|
||||
|
||||
static void prtTSI(const char * msg, tsortInfo tsi)
|
||||
/*@globals fileSystem@*/
|
||||
/*@modifies fileSystem@*/
|
||||
{
|
||||
/*@-nullpass@*/
|
||||
if (_te_debug) {
|
||||
if (msg) fprintf(stderr, "%s", msg);
|
||||
fprintf(stderr, " tsi %p suc %p next %p chain %p reqx %d qcnt %d\n", tsi, tsi->tsi_suc, tsi->tsi_next, tsi->tsi_chain, tsi->tsi_reqx, tsi->tsi_qcnt);
|
||||
}
|
||||
/*@=nullpass@*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Record next "q <- p" relation (i.e. "p" requires "q").
|
||||
* @param ts transaction set
|
||||
|
@ -1344,53 +1365,97 @@ zapRelation(availablePackage q, availablePackage p, rpmDepSet requires,
|
|||
* @return 0 always
|
||||
*/
|
||||
static inline int addRelation(const rpmTransactionSet ts,
|
||||
availablePackage p, unsigned char * selected,
|
||||
transactionElement p, unsigned char * selected,
|
||||
rpmDepSet requires)
|
||||
/*@modifies p, *selected @*/
|
||||
{
|
||||
availablePackage q;
|
||||
transactionElement q;
|
||||
tsortInfo tsi;
|
||||
int matchNum;
|
||||
long matchNum;
|
||||
int i = 0;
|
||||
|
||||
if (!requires->N || !requires->EVR || !requires->Flags)
|
||||
return 0;
|
||||
|
||||
q = alSatisfiesDepend(ts->addedPackages, NULL, NULL, requires);
|
||||
matchNum = alSatisfiesDepend(ts->addedPackages, NULL, NULL, requires);
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: matchNum %d\n", (int)matchNum);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
|
||||
/* Ordering depends only on added package relations. */
|
||||
if (q == NULL)
|
||||
if (matchNum == -1L)
|
||||
return 0;
|
||||
|
||||
/* XXX set q to the added package that has matchNum == q->u.addedIndex */
|
||||
/* XXX FIXME: bsearch is possible/needed here */
|
||||
if ((q = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, q++) {
|
||||
if (q->type == TR_ADDED && matchNum == q->u.addedIndex)
|
||||
break;
|
||||
}
|
||||
/*@-modfilesystem -nullpass -nullderef@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: q %p(%s) from %p[%d:%d]\n", q, q->name, ts->order, i, ts->orderCount);
|
||||
/*@=modfilesystem =nullpass =nullderef@*/
|
||||
assert(i < ts->orderCount);
|
||||
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: requires[%d] %s\n", requires->i, requires->N[requires->i]);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
/* Avoid rpmlib feature dependencies. */
|
||||
if (!strncmp(requires->N[requires->i], "rpmlib(", sizeof("rpmlib(")-1))
|
||||
return 0;
|
||||
|
||||
#if defined(DEPENDENCY_WHITEOUT)
|
||||
/* Avoid certain dependency relations. */
|
||||
if (ignoreDep(p, q))
|
||||
if (q == NULL || ignoreDep(p, q))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* Avoid redundant relations. */
|
||||
/* XXX TODO: add control bit. */
|
||||
matchNum = alGetPkgIndex(ts->addedPackages, q);
|
||||
if (selected[matchNum] != 0)
|
||||
i = q - ts->order;
|
||||
if (selected[i] != 0)
|
||||
return 0;
|
||||
selected[matchNum] = 1;
|
||||
selected[i] = 1;
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: selected[%d] = 1\n", i);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
|
||||
/* T3. Record next "q <- p" relation (i.e. "p" requires "q"). */
|
||||
p->tsi.tsi_count++; /* bump p predecessor count */
|
||||
if (p->depth <= q->depth) /* Save max. depth in dependency tree */
|
||||
p->depth = q->depth + 1;
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: p %p(%s) depth %d", p, p->name, p->depth);
|
||||
prtTSI(NULL, &p->tsi);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
|
||||
tsi = xmalloc(sizeof(*tsi));
|
||||
tsi = xcalloc(1, sizeof(*tsi));
|
||||
/*@-assignexpose@*/
|
||||
tsi->tsi_suc = p;
|
||||
/*@=assignexpose@*/
|
||||
tsi->tsi_reqx = requires->i;
|
||||
tsi->tsi_next = q->tsi.tsi_next;
|
||||
/*@-modfilesystem -nullpass -compmempass@*/
|
||||
prtTSI("addRelation: new", tsi);
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: BEFORE q %p(%s)\n", q, q->name);
|
||||
prtTSI(NULL, &q->tsi);
|
||||
/*@=modfilesystem =nullpass =compmempass@*/
|
||||
/*@-mods@*/
|
||||
q->tsi.tsi_next = tsi;
|
||||
q->tsi.tsi_qcnt++; /* bump q successor count */
|
||||
/*@=mods@*/
|
||||
/*@-modfilesystem -nullpass -compmempass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "addRelation: AFTER q %p(%s)\n", q, q->name);
|
||||
prtTSI(NULL, &q->tsi);
|
||||
/*@=modfilesystem =nullpass =compmempass@*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1415,12 +1480,12 @@ static int orderListIndexCmp(const void * one, const void * two) /*@*/
|
|||
* @retval qp address of first element
|
||||
* @retval rp address of last element
|
||||
*/
|
||||
static void addQ(availablePackage p,
|
||||
/*@in@*/ /*@out@*/ availablePackage * qp,
|
||||
/*@in@*/ /*@out@*/ availablePackage * rp)
|
||||
static void addQ(transactionElement p,
|
||||
/*@in@*/ /*@out@*/ transactionElement * qp,
|
||||
/*@in@*/ /*@out@*/ transactionElement * rp)
|
||||
/*@modifies p, *qp, *rp @*/
|
||||
{
|
||||
availablePackage q, qprev;
|
||||
transactionElement q, qprev;
|
||||
|
||||
if ((*rp) == NULL) { /* 1st element */
|
||||
(*rp) = (*qp) = p;
|
||||
|
@ -1446,16 +1511,16 @@ static void addQ(availablePackage p,
|
|||
|
||||
int rpmdepOrder(rpmTransactionSet ts)
|
||||
{
|
||||
int npkgs = alGetSize(ts->addedPackages);
|
||||
int nadded = alGetSize(ts->addedPackages);
|
||||
int chainsaw = ts->transFlags & RPMTRANS_FLAG_CHAINSAW;
|
||||
availablePackage p;
|
||||
availablePackage q;
|
||||
availablePackage r;
|
||||
transactionElement p;
|
||||
transactionElement q;
|
||||
transactionElement r;
|
||||
tsortInfo tsi;
|
||||
tsortInfo tsi_next;
|
||||
int * ordering = alloca(sizeof(*ordering) * (npkgs + 1));
|
||||
int * ordering = alloca(sizeof(*ordering) * (nadded + 1));
|
||||
int orderingCount = 0;
|
||||
unsigned char * selected = alloca(sizeof(*selected) * (npkgs + 1));
|
||||
unsigned char * selected = alloca(sizeof(*selected) * (ts->orderCount + 1));
|
||||
int loopcheck;
|
||||
transactionElement newOrder;
|
||||
int newOrderCount = 0;
|
||||
|
@ -1466,39 +1531,88 @@ int rpmdepOrder(rpmTransactionSet ts)
|
|||
int i, j;
|
||||
|
||||
alMakeIndex(ts->addedPackages);
|
||||
alMakeIndex(ts->availablePackages);
|
||||
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "*** rpmdepOrder(%p) order %p[%d]\n", ts, ts->order, ts->orderCount);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
|
||||
/* T1. Initialize. */
|
||||
loopcheck = npkgs;
|
||||
loopcheck = ts->orderCount;
|
||||
if ((p = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, p++) {
|
||||
|
||||
/* Initialize tsortInfo. */
|
||||
memset(&p->tsi, 0, sizeof(p->tsi));
|
||||
p->npreds = 0;
|
||||
p->depth = 0;
|
||||
p->NEVR = NULL;
|
||||
p->name = NULL;
|
||||
p->version = NULL;
|
||||
p->release = NULL;
|
||||
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(p->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Retrieve info from addedPackages. */
|
||||
p->NEVR = alGetNVR(ts->addedPackages, p->u.addedIndex);
|
||||
p->name = alGetNVR(ts->addedPackages, p->u.addedIndex);
|
||||
/*@-nullpass@*/
|
||||
if ((p->release = strrchr(p->name, '-')) != NULL)
|
||||
*p->release++ = '\0';
|
||||
if ((p->version = strrchr(p->name, '-')) != NULL)
|
||||
*p->version++ = '\0';
|
||||
/*@-modfilesystem@*/
|
||||
prtTSI(p->NEVR, &p->tsi);
|
||||
/*@=modfilesystem@*/
|
||||
/*@=nullpass@*/
|
||||
}
|
||||
|
||||
/* Record all relations. */
|
||||
rpmMessage(RPMMESS_DEBUG, _("========== recording tsort relations\n"));
|
||||
for (i = 0; i < npkgs; i++) {
|
||||
if ((p = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, p++) {
|
||||
rpmDepSet requires;
|
||||
int matchNum;
|
||||
|
||||
if ((p = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(p->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
requires = alGetRequires(ts->addedPackages, i);
|
||||
requires = alGetRequires(ts->addedPackages, p->u.addedIndex);
|
||||
|
||||
if (requires->Count <= 0)
|
||||
continue;
|
||||
if (requires->Flags == NULL) /* XXX can't happen */
|
||||
continue;
|
||||
|
||||
memset(selected, 0, sizeof(*selected) * npkgs);
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "\t+++ %p[%d] %s %s-%s-%s requires[%d] %p[%d] Flags %p\n", p, i, p->NEVR, p->name, p->version, p->release, p->u.addedIndex, requires, requires->Count, requires->Flags);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
|
||||
memset(selected, 0, sizeof(*selected) * ts->orderCount);
|
||||
|
||||
/* Avoid narcisstic relations. */
|
||||
matchNum = alGetPkgIndex(ts->addedPackages, p);
|
||||
selected[matchNum] = 1;
|
||||
selected[i] = 1;
|
||||
|
||||
/* T2. Next "q <- p" relation. */
|
||||
|
||||
/* First, do pre-requisites. */
|
||||
for (requires->i = 0; requires->i < requires->Count; requires->i++) {
|
||||
|
||||
if (requires->Flags == NULL) /* XXX can't happen */
|
||||
/*@innercontinue@*/ continue;
|
||||
|
||||
/* Skip if not %pre/%post requires or legacy prereq. */
|
||||
|
||||
if (isErasePreReq(requires->Flags[requires->i]) ||
|
||||
|
@ -1514,9 +1628,6 @@ int rpmdepOrder(rpmTransactionSet ts)
|
|||
/* Then do co-requisites. */
|
||||
for (requires->i = 0; requires->i < requires->Count; requires->i++) {
|
||||
|
||||
if (requires->Flags == NULL) /* XXX can't happen */
|
||||
/*@innercontinue@*/ continue;
|
||||
|
||||
/* Skip if %pre/%post requires or legacy prereq. */
|
||||
|
||||
if (isErasePreReq(requires->Flags[requires->i]) ||
|
||||
|
@ -1531,12 +1642,24 @@ int rpmdepOrder(rpmTransactionSet ts)
|
|||
}
|
||||
|
||||
/* Save predecessor count. */
|
||||
for (i = 0; i < npkgs; i++) {
|
||||
|
||||
if ((p = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
if ((p = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, p++) {
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(p->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
p->npreds = p->tsi.tsi_count;
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "\t+++ %p[%d] %s npreds %d\n", p, i, p->NEVR, p->npreds);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
|
||||
}
|
||||
|
||||
/* T4. Scan for zeroes. */
|
||||
|
@ -1545,30 +1668,53 @@ int rpmdepOrder(rpmTransactionSet ts)
|
|||
rescan:
|
||||
q = r = NULL;
|
||||
qlen = 0;
|
||||
for (i = 0; i < npkgs; i++) {
|
||||
if ((p = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, p++) {
|
||||
|
||||
if ((p = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(p->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Prefer packages in presentation order. */
|
||||
if (!chainsaw)
|
||||
p->tsi.tsi_qcnt = (npkgs - i);
|
||||
p->tsi.tsi_qcnt = (ts->orderCount - i);
|
||||
|
||||
if (p->tsi.tsi_count != 0)
|
||||
continue;
|
||||
p->tsi.tsi_suc = NULL;
|
||||
addQ(p, &q, &r);
|
||||
qlen++;
|
||||
/*@-modfilesystem -nullpass@*/
|
||||
if (_te_debug)
|
||||
fprintf(stderr, "\t+++ %p[%d] %s addQ ++ q %p %d\n", p, i, p->NEVR, q, qlen);
|
||||
/*@=modfilesystem =nullpass@*/
|
||||
}
|
||||
|
||||
/* T5. Output front of queue (T7. Remove from queue.) */
|
||||
/*@-branchstate@*/ /* FIX: r->tsi.tsi_next released */
|
||||
for (; q != NULL; q = q->tsi.tsi_suc) {
|
||||
|
||||
rpmMessage(RPMMESS_DEBUG, "%5d%5d%5d%3d %*s %s-%s-%s\n",
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(q->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
rpmMessage(RPMMESS_DEBUG, "%5d%5d%5d%3d %*s %s\n",
|
||||
orderingCount, q->npreds, q->tsi.tsi_qcnt, q->depth,
|
||||
2*q->depth, "",
|
||||
q->name, q->version, q->release);
|
||||
ordering[orderingCount++] = alGetPkgIndex(ts->addedPackages, q);
|
||||
(2 * q->depth), "",
|
||||
(q->NEVR ? q->NEVR : "???"));
|
||||
ordering[orderingCount++] = q->u.addedIndex;
|
||||
qlen--;
|
||||
loopcheck--;
|
||||
|
||||
|
@ -1595,6 +1741,7 @@ rescan:
|
|||
_("========== successors only (presentation order)\n"));
|
||||
}
|
||||
}
|
||||
/*@=branchstate@*/
|
||||
|
||||
/* T8. End of process. Check for loops. */
|
||||
if (loopcheck != 0) {
|
||||
|
@ -1602,12 +1749,20 @@ rescan:
|
|||
|
||||
/* T9. Initialize predecessor chain. */
|
||||
nzaps = 0;
|
||||
for (i = 0; i < npkgs; i++) {
|
||||
if ((q = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, q++) {
|
||||
|
||||
if ((q = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(q->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
q->tsi.tsi_pkg = NULL;
|
||||
q->tsi.tsi_chain = NULL;
|
||||
q->tsi.tsi_reqx = 0;
|
||||
/* Mark packages already sorted. */
|
||||
if (q->tsi.tsi_count == 0)
|
||||
|
@ -1615,10 +1770,18 @@ rescan:
|
|||
}
|
||||
|
||||
/* T10. Mark all packages with their predecessors. */
|
||||
for (i = 0; i < npkgs; i++) {
|
||||
if ((q = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, q++) {
|
||||
|
||||
if ((q = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(q->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
if ((tsi = q->tsi.tsi_next) == NULL)
|
||||
continue;
|
||||
|
@ -1629,28 +1792,36 @@ rescan:
|
|||
|
||||
/* T11. Print all dependency loops. */
|
||||
/*@-branchstate@*/
|
||||
for (i = 0; i < npkgs; i++) {
|
||||
if ((r = ts->order) != NULL)
|
||||
for (i = 0; i < ts->orderCount; i++, r++) {
|
||||
int printed;
|
||||
|
||||
if ((r = alGetPkg(ts->addedPackages, i)) == NULL)
|
||||
break;
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(r->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
printed = 0;
|
||||
|
||||
/* T12. Mark predecessor chain, looking for start of loop. */
|
||||
for (q = r->tsi.tsi_pkg; q != NULL; q = q->tsi.tsi_pkg) {
|
||||
for (q = r->tsi.tsi_chain; q != NULL; q = q->tsi.tsi_chain) {
|
||||
if (q->tsi.tsi_reqx)
|
||||
/*@innerbreak@*/ break;
|
||||
q->tsi.tsi_reqx = 1;
|
||||
}
|
||||
|
||||
/* T13. Print predecessor chain from start of loop. */
|
||||
while ((p = q) != NULL && (q = p->tsi.tsi_pkg) != NULL) {
|
||||
while ((p = q) != NULL && (q = p->tsi.tsi_chain) != NULL) {
|
||||
const char * dp;
|
||||
char buf[4096];
|
||||
|
||||
/* Unchain predecessor loop. */
|
||||
p->tsi.tsi_pkg = NULL;
|
||||
p->tsi.tsi_chain = NULL;
|
||||
|
||||
if (!printed) {
|
||||
rpmMessage(RPMMESS_DEBUG, _("LOOP:\n"));
|
||||
|
@ -1658,10 +1829,14 @@ rescan:
|
|||
}
|
||||
|
||||
/* Find (and destroy if co-requisite) "q <- p" relation. */
|
||||
dp = zapRelation(q, p, &p->requires, 1, &nzaps);
|
||||
dp = zapRelation(q, p,
|
||||
alGetRequires(ts->addedPackages, p->u.addedIndex),
|
||||
1, &nzaps);
|
||||
|
||||
/* Print next member of loop. */
|
||||
sprintf(buf, "%s-%s-%s", p->name, p->version, p->release);
|
||||
buf[0] = '\0';
|
||||
if (p->NEVR != NULL)
|
||||
(void) stpcpy(buf, p->NEVR);
|
||||
rpmMessage(RPMMESS_DEBUG, " %-40s %s\n", buf,
|
||||
(dp ? dp : "not found!?!"));
|
||||
|
||||
|
@ -1669,12 +1844,12 @@ rescan:
|
|||
}
|
||||
|
||||
/* Walk (and erase) linear part of predecessor chain as well. */
|
||||
for (p = r, q = r->tsi.tsi_pkg;
|
||||
for (p = r, q = r->tsi.tsi_chain;
|
||||
q != NULL;
|
||||
p = q, q = q->tsi.tsi_pkg)
|
||||
p = q, q = q->tsi.tsi_chain)
|
||||
{
|
||||
/* Unchain linear part of predecessor loop. */
|
||||
p->tsi.tsi_pkg = NULL;
|
||||
p->tsi.tsi_chain = NULL;
|
||||
p->tsi.tsi_reqx = 0;
|
||||
}
|
||||
}
|
||||
|
@ -1695,17 +1870,39 @@ rescan:
|
|||
* the new package. This would be easier if we could sort the
|
||||
* addedPackages array, but we store indexes into it in various places.
|
||||
*/
|
||||
orderList = xcalloc(npkgs, sizeof(*orderList));
|
||||
for (i = 0, j = 0; i < ts->orderCount; i++) {
|
||||
if (ts->order[i].type == TR_ADDED) {
|
||||
orderList[j].alIndex = ts->order[i].u.addedIndex;
|
||||
orderList[j].orIndex = i;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
assert(j <= npkgs);
|
||||
nadded = alGetSize(ts->addedPackages);
|
||||
orderList = xcalloc(nadded, sizeof(*orderList));
|
||||
j = 0;
|
||||
if ((p = ts->order) != NULL)
|
||||
for (i = 0, j = 0; i < ts->orderCount; i++, p++) {
|
||||
|
||||
qsort(orderList, npkgs, sizeof(*orderList), orderListIndexCmp);
|
||||
/* XXX Only added packages are ordered (for now). */
|
||||
switch(p->type) {
|
||||
case TR_ADDED:
|
||||
/*@switchbreak@*/ break;
|
||||
case TR_REMOVED:
|
||||
default:
|
||||
continue;
|
||||
/*@notreached@*/ /*@switchbreak@*/ break;
|
||||
}
|
||||
|
||||
/* Clean up tsort remnants (if any). */
|
||||
while ((tsi = p->tsi.tsi_next) != NULL) {
|
||||
p->tsi.tsi_next = tsi->tsi_next;
|
||||
tsi->tsi_next = NULL;
|
||||
tsi = _free(tsi);
|
||||
}
|
||||
p->NEVR = _free(p->NEVR);
|
||||
p->name = _free(p->name);
|
||||
|
||||
/* Prepare added package partial ordering permutation. */
|
||||
orderList[j].alIndex = p->u.addedIndex;
|
||||
orderList[j].orIndex = i;
|
||||
j++;
|
||||
}
|
||||
assert(j <= nadded);
|
||||
|
||||
qsort(orderList, nadded, sizeof(*orderList), orderListIndexCmp);
|
||||
|
||||
newOrder = xcalloc(ts->orderCount, sizeof(*newOrder));
|
||||
for (i = 0, newOrderCount = 0; i < orderingCount; i++) {
|
||||
|
@ -1713,7 +1910,7 @@ rescan:
|
|||
orderListIndex needle;
|
||||
|
||||
key.alIndex = ordering[i];
|
||||
needle = bsearch(&key, orderList, npkgs, sizeof(key),orderListIndexCmp);
|
||||
needle = bsearch(&key, orderList, nadded, sizeof(key),orderListIndexCmp);
|
||||
/* bsearch should never, ever fail */
|
||||
if (needle == NULL) continue;
|
||||
|
||||
|
@ -1790,7 +1987,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
Header h = NULL;
|
||||
availablePackage p;
|
||||
problemsSet ps = NULL;
|
||||
int npkgs;
|
||||
int nadded;
|
||||
int closeatexit = 0;
|
||||
int i, j, xx;
|
||||
int rc;
|
||||
|
@ -1802,7 +1999,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
closeatexit = 1;
|
||||
}
|
||||
|
||||
npkgs = alGetSize(ts->addedPackages);
|
||||
nadded = alGetSize(ts->addedPackages);
|
||||
|
||||
ps = xcalloc(1, sizeof(*ps));
|
||||
ps->alloced = 5;
|
||||
|
@ -1819,7 +2016,7 @@ int rpmdepCheck(rpmTransactionSet ts,
|
|||
* Look at all of the added packages and make sure their dependencies
|
||||
* are satisfied.
|
||||
*/
|
||||
for (i = 0; i < npkgs; i++)
|
||||
for (i = 0; i < nadded; i++)
|
||||
{
|
||||
char * pkgNVR, * n, * v, * r;
|
||||
rpmDepSet provides;
|
||||
|
|
|
@ -9,31 +9,65 @@
|
|||
#include <header.h>
|
||||
#include <rpmhash.h>
|
||||
|
||||
typedef /*@abstract@*/ struct availableList_s * availableList;
|
||||
typedef /*@abstract@*/ struct problemsSet_s * problemsSet;
|
||||
typedef /*@abstract@*/ struct tsortInfo_s * tsortInfo;
|
||||
typedef /*@abstract@*/ struct orderListIndex_s * orderListIndex;
|
||||
typedef /*@abstract@*/ struct transactionElement_s * transactionElement;
|
||||
|
||||
typedef /*@abstract@*/ struct availableList_s * availableList;
|
||||
typedef /*@abstract@*/ struct problemsSet_s * problemsSet;
|
||||
|
||||
/*@unchecked@*/
|
||||
/*@-exportlocal@*/
|
||||
extern int _ts_debug;
|
||||
/*@=exportlocal@*/
|
||||
|
||||
/** \ingroup rpmdep
|
||||
* Dependncy ordering information.
|
||||
*/
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
struct tsortInfo_s {
|
||||
union {
|
||||
int count;
|
||||
/*@kept@*/ /*@null@*/ transactionElement suc;
|
||||
} tsi_u;
|
||||
#define tsi_count tsi_u.count
|
||||
#define tsi_suc tsi_u.suc
|
||||
/*@owned@*/ /*@null@*/
|
||||
struct tsortInfo_s * tsi_next;
|
||||
/*@null@*/
|
||||
transactionElement tsi_chain;
|
||||
int tsi_reqx;
|
||||
int tsi_qcnt;
|
||||
};
|
||||
/*@=fielduse@*/
|
||||
|
||||
/**
|
||||
*/
|
||||
struct orderListIndex_s {
|
||||
int alIndex;
|
||||
int orIndex;
|
||||
};
|
||||
|
||||
|
||||
/** \ingroup rpmdep
|
||||
* A single package instance to be installed/removed atomically.
|
||||
*/
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
struct transactionElement_s {
|
||||
/*@only@*/ /*@null@*/
|
||||
char * NEVR;
|
||||
/*@owned@*/ /*@null@*/
|
||||
char * name;
|
||||
/*@dependent@*/ /*@null@*/
|
||||
char * version;
|
||||
/*@dependent@*/ /*@null@*/
|
||||
char * release;
|
||||
int npreds; /*!< No. of predecessors. */
|
||||
int depth; /*!< Max. depth in dependency tree. */
|
||||
struct tsortInfo_s tsi;
|
||||
enum rpmTransactionType {
|
||||
TR_ADDED, /*!< Package will be installed. */
|
||||
TR_REMOVED /*!< Package will be removed. */
|
||||
} type; /*!< Package disposition (installed/removed). */
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
union {
|
||||
/*@unused@*/ int addedIndex;
|
||||
/*@unused@*/ struct {
|
||||
|
@ -41,8 +75,8 @@ struct transactionElement_s {
|
|||
int dependsOnIndex;
|
||||
} removed;
|
||||
} u;
|
||||
} ;
|
||||
/*@=fielduse@*/
|
||||
};
|
||||
|
||||
/**
|
||||
* A package dependency set.
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include <rpmlib.h>
|
||||
|
||||
#include "depends.h"
|
||||
#include "rpmal.h"
|
||||
#include "misc.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
@ -64,15 +63,14 @@ void rpmProblemSetAppend(rpmProblemSet tsprobs, rpmProblemType type,
|
|||
memset(p, 0, sizeof(*p));
|
||||
|
||||
p->type = type;
|
||||
|
||||
p->key = key;
|
||||
|
||||
p->ulong1 = ulong1;
|
||||
p->ignoreProblem = 0;
|
||||
p->str1 = NULL;
|
||||
p->pkgNEVR = NULL;
|
||||
p->altNEVR = NULL;
|
||||
|
||||
p->pkgNEVR = pkgNEVR; /* XXX FIXME: xstrdup */
|
||||
p->altNEVR = altNEVR; /* XXX FIXME: xstrdup */
|
||||
|
||||
p->str1 = NULL;
|
||||
if (dn != NULL || bn != NULL) {
|
||||
t = xcalloc(1, (dn != NULL ? strlen(dn) : 0) +
|
||||
(bn != NULL ? strlen(bn) : 0) + 1);
|
||||
|
@ -80,10 +78,6 @@ void rpmProblemSetAppend(rpmProblemSet tsprobs, rpmProblemType type,
|
|||
if (dn != NULL) t = stpcpy(t, dn);
|
||||
if (bn != NULL) t = stpcpy(t, bn);
|
||||
}
|
||||
|
||||
p->pkgNEVR = pkgNEVR;
|
||||
p->altNEVR = altNEVR;
|
||||
|
||||
}
|
||||
|
||||
#define XSTRCMP(a, b) ((!(a) && !(b)) || ((a) && (b) && !strcmp((a), (b))))
|
||||
|
|
28
lib/rpmal.c
28
lib/rpmal.c
|
@ -26,6 +26,7 @@ typedef /*@abstract@*/ struct availableIndex_s * availableIndex;
|
|||
/*@access availableList@*/
|
||||
|
||||
/*@access availablePackage@*/
|
||||
/*@access tsortInfo@*/
|
||||
|
||||
/*@access rpmDepSet@*/
|
||||
|
||||
|
@ -152,14 +153,6 @@ rpmDepSet alGetRequires(const availableList al, int pkgNum)
|
|||
/*@=immediatetrans =retexpose@*/
|
||||
}
|
||||
|
||||
tsortInfo alGetTSI(const availableList al, int pkgNum)
|
||||
{
|
||||
availablePackage alp = alGetPkg(al, pkgNum);
|
||||
/*@-immediatetrans -retexpose@*/
|
||||
return (alp != NULL ? &alp->tsi : 0);
|
||||
/*@=immediatetrans =retexpose@*/
|
||||
}
|
||||
|
||||
Header alGetHeader(availableList al, int pkgNum, int unlink)
|
||||
{
|
||||
availablePackage alp = alGetPkg(al, pkgNum);
|
||||
|
@ -279,14 +272,6 @@ availableList alFree(availableList al)
|
|||
if ((p = al->list) != NULL)
|
||||
for (i = 0; i < al->size; i++, p++) {
|
||||
|
||||
{ tsortInfo tsi;
|
||||
while ((tsi = p->tsi.tsi_next) != NULL) {
|
||||
p->tsi.tsi_next = tsi->tsi_next;
|
||||
tsi->tsi_next = NULL;
|
||||
tsi = _free(tsi);
|
||||
}
|
||||
}
|
||||
|
||||
p->provides.N = hfd(p->provides.N, -1);
|
||||
p->provides.EVR = hfd(p->provides.EVR, -1);
|
||||
p->requires.N = hfd(p->requires.N, -1);
|
||||
|
@ -463,8 +448,6 @@ alAddPackage(availableList al, int pkgNum,
|
|||
p = al->list + pkgNum;
|
||||
|
||||
p->h = headerLink(h); /* XXX reference held by transaction set */
|
||||
p->depth = p->npreds = 0;
|
||||
memset(&p->tsi, 0, sizeof(p->tsi));
|
||||
p->multiLib = 0; /* MULTILIB */
|
||||
|
||||
xx = headerNVR(p->h, &p->name, &p->version, &p->release);
|
||||
|
@ -877,17 +860,16 @@ alAllSatisfiesDepend(const availableList al,
|
|||
return ret;
|
||||
}
|
||||
|
||||
availablePackage alSatisfiesDepend(const availableList al,
|
||||
long alSatisfiesDepend(const availableList al,
|
||||
const char * keyType, const char * keyDepend,
|
||||
const rpmDepSet key)
|
||||
{
|
||||
availablePackage ret;
|
||||
availablePackage * tmp = alAllSatisfiesDepend(al, keyType, keyDepend, key);
|
||||
|
||||
if (tmp) {
|
||||
ret = tmp[0];
|
||||
availablePackage ret = tmp[0];
|
||||
tmp = _free(tmp);
|
||||
return ret;
|
||||
return (ret - al->list);
|
||||
}
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
|
41
lib/rpmal.h
41
lib/rpmal.h
|
@ -6,30 +6,6 @@
|
|||
* Structures used for managing added/available package lists.
|
||||
*/
|
||||
|
||||
/**
|
||||
*/
|
||||
typedef /*@abstract@*/ struct tsortInfo_s * tsortInfo;
|
||||
|
||||
/** \ingroup rpmdep
|
||||
* Dependncy ordering information.
|
||||
*/
|
||||
/*@-fielduse@*/ /* LCL: confused by union? */
|
||||
struct tsortInfo_s {
|
||||
union {
|
||||
int count;
|
||||
/*@kept@*/ /*@null@*/ availablePackage suc;
|
||||
} tsi_u;
|
||||
#define tsi_count tsi_u.count
|
||||
#define tsi_suc tsi_u.suc
|
||||
/*@owned@*/ /*@null@*/
|
||||
struct tsortInfo_s * tsi_next;
|
||||
/*@kept@*/ /*@null@*/
|
||||
availablePackage tsi_pkg;
|
||||
int tsi_reqx;
|
||||
int tsi_qcnt;
|
||||
};
|
||||
/*@=fielduse@*/
|
||||
|
||||
/** \ingroup rpmdep
|
||||
* Info about a single package to be installed.
|
||||
*/
|
||||
|
@ -43,9 +19,6 @@ struct availablePackage_s {
|
|||
/*@owned@*//*@null@*/ const char ** baseNames; /*!< Header file basenames. */
|
||||
/*@dependent@*//*@null@*/ int_32 * epoch; /*!< Header epoch (if any). */
|
||||
int filesCount; /*!< No. of files in header. */
|
||||
int npreds; /*!< No. of predecessors. */
|
||||
int depth; /*!< Max. depth in dependency tree. */
|
||||
struct tsortInfo_s tsi; /*!< Dependency tsort data. */
|
||||
uint_32 multiLib; /* MULTILIB */
|
||||
/*@kept@*//*@null@*/ const void * key; /*!< Private data associated with a package (e.g. file name of package). */
|
||||
/*@null@*/ rpmRelocation * relocs;
|
||||
|
@ -110,15 +83,6 @@ rpmDepSet alGetProvides(/*@null@*/ const availableList al, int pkgNum)
|
|||
rpmDepSet alGetRequires(/*@null@*/ const availableList al, int pkgNum)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Return available package tsort info.
|
||||
* @param al available list
|
||||
* @param pkgNum available package index
|
||||
* @return available package tsort info
|
||||
*/
|
||||
tsortInfo alGetTSI(/*@null@*/ const availableList al, int pkgNum)
|
||||
/*@*/;
|
||||
|
||||
/**
|
||||
* Return available package header.
|
||||
* @param al available list
|
||||
|
@ -279,10 +243,9 @@ availablePackage * alAllSatisfiesDepend(const availableList al,
|
|||
* @param keyType type of dependency
|
||||
* @param keyDepend dependency string representation
|
||||
* @param key dependency
|
||||
* @return available package pointer
|
||||
* @return available package index, -1 on not found
|
||||
*/
|
||||
/*@only@*/ /*@null@*/
|
||||
availablePackage alSatisfiesDepend(const availableList al,
|
||||
long alSatisfiesDepend(const availableList al,
|
||||
const char * keyType, const char * keyDepend,
|
||||
const rpmDepSet key)
|
||||
/*@*/;
|
||||
|
|
78
po/rpm.pot
78
po/rpm.pot
|
@ -6,7 +6,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 2001-10-30 22:54-0500\n"
|
||||
"POT-Creation-Date: 2001-10-31 17:15-0500\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -1411,82 +1411,82 @@ msgid " failed - "
|
|||
msgstr ""
|
||||
|
||||
#. XXX legacy epoch-less requires/conflicts compatibility
|
||||
#: lib/depends.c:184
|
||||
#: lib/depends.c:183
|
||||
#, c-format
|
||||
msgid ""
|
||||
"the \"B\" dependency needs an epoch (assuming same as \"A\")\n"
|
||||
"\tA %s\tB %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:213
|
||||
#: lib/depends.c:212
|
||||
#, c-format
|
||||
msgid " %s A %s\tB %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:214 lib/depends.c:791 lib/depends.c:923
|
||||
#: lib/depends.c:213 lib/depends.c:794 lib/depends.c:926
|
||||
msgid "YES"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:214 lib/depends.c:791 lib/depends.c:923
|
||||
#: lib/depends.c:213 lib/depends.c:794 lib/depends.c:926
|
||||
msgid "NO "
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:356
|
||||
#: lib/depends.c:355
|
||||
#, c-format
|
||||
msgid "cannot open Packages database in %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:544
|
||||
#: lib/depends.c:545
|
||||
#, c-format
|
||||
msgid "newer package %s already added, skipping %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:549
|
||||
#: lib/depends.c:550
|
||||
#, c-format
|
||||
msgid "package %s already added, ignoring\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:554
|
||||
#: lib/depends.c:555
|
||||
#, c-format
|
||||
msgid "older package %s already added, replacing with %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:790
|
||||
#: lib/depends.c:793
|
||||
#, c-format
|
||||
msgid "%s: %-45s %-s (cached)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:819
|
||||
#: lib/depends.c:822
|
||||
#, c-format
|
||||
msgid "%s: %-45s YES (rpmrc provides)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:836
|
||||
#: lib/depends.c:839
|
||||
#, c-format
|
||||
msgid "%s: %-45s YES (rpmlib provides)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:859
|
||||
#: lib/depends.c:862
|
||||
#, c-format
|
||||
msgid "%s: %-45s YES (db files)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:872
|
||||
#: lib/depends.c:875
|
||||
#, c-format
|
||||
msgid "%s: %-45s YES (db provides)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:886
|
||||
#: lib/depends.c:889
|
||||
#, c-format
|
||||
msgid "%s: %-45s YES (db package)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:902
|
||||
#: lib/depends.c:905
|
||||
#, c-format
|
||||
msgid "%s: %-45s NO\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:923
|
||||
#: lib/depends.c:926
|
||||
#, c-format
|
||||
msgid "%s: (%s, %s) added to Depends cache.\n"
|
||||
msgstr ""
|
||||
|
@ -1494,42 +1494,42 @@ msgstr ""
|
|||
#. requirements are satisfied.
|
||||
#. @switchbreak@
|
||||
#. requirements are not satisfied.
|
||||
#: lib/depends.c:989
|
||||
#: lib/depends.c:992
|
||||
#, c-format
|
||||
msgid "package %s-%s-%s require not satisfied: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#. conflicts exist.
|
||||
#: lib/depends.c:1067
|
||||
#: lib/depends.c:1072
|
||||
#, c-format
|
||||
msgid "package %s conflicts: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:1319
|
||||
#: lib/depends.c:1328
|
||||
#, c-format
|
||||
msgid "removing %s-%s-%s \"%s\" from tsort relations.\n"
|
||||
msgid "removing %s \"%s\" from tsort relations.\n"
|
||||
msgstr ""
|
||||
|
||||
#. Record all relations.
|
||||
#: lib/depends.c:1475
|
||||
#: lib/depends.c:1579
|
||||
msgid "========== recording tsort relations\n"
|
||||
msgstr ""
|
||||
|
||||
#. T4. Scan for zeroes.
|
||||
#: lib/depends.c:1543
|
||||
#: lib/depends.c:1666
|
||||
msgid ""
|
||||
"========== tsorting packages (order, #predecessors, #succesors, depth)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:1595
|
||||
#: lib/depends.c:1741
|
||||
msgid "========== successors only (presentation order)\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:1656
|
||||
#: lib/depends.c:1827
|
||||
msgid "LOOP:\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/depends.c:1686
|
||||
#: lib/depends.c:1861
|
||||
msgid "========== continuing tsort ...\n"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2137,67 +2137,67 @@ msgstr ""
|
|||
msgid "generate signature"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:208
|
||||
#: lib/problems.c:202
|
||||
#, c-format
|
||||
msgid " is needed by %s-%s-%s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:211
|
||||
#: lib/problems.c:205
|
||||
#, c-format
|
||||
msgid " conflicts with %s-%s-%s\n"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:251
|
||||
#: lib/problems.c:245
|
||||
#, c-format
|
||||
msgid "package %s is for a different architecture"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:256
|
||||
#: lib/problems.c:250
|
||||
#, c-format
|
||||
msgid "package %s is for a different operating system"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:261
|
||||
#: lib/problems.c:255
|
||||
#, c-format
|
||||
msgid "package %s is already installed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:266
|
||||
#: lib/problems.c:260
|
||||
#, c-format
|
||||
msgid "path %s in package %s is not relocateable"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:271
|
||||
#: lib/problems.c:265
|
||||
#, c-format
|
||||
msgid "file %s conflicts between attempted installs of %s and %s"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:276
|
||||
#: lib/problems.c:270
|
||||
#, c-format
|
||||
msgid "file %s from install of %s conflicts with file from package %s"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:281
|
||||
#: lib/problems.c:275
|
||||
#, c-format
|
||||
msgid "package %s (which is newer than %s) is already installed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:286
|
||||
#: lib/problems.c:280
|
||||
#, c-format
|
||||
msgid "installing package %s needs %ld%cb on the %s filesystem"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:296
|
||||
#: lib/problems.c:290
|
||||
#, c-format
|
||||
msgid "installing package %s needs %ld inodes on the %s filesystem"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:301
|
||||
#: lib/problems.c:295
|
||||
#, c-format
|
||||
msgid "package %s pre-transaction syscall(s): %s failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#: lib/problems.c:308
|
||||
#: lib/problems.c:302
|
||||
#, c-format
|
||||
msgid "unknown error %d encountered while manipulating package %s"
|
||||
msgstr ""
|
||||
|
|
Loading…
Reference in New Issue