fix: version compares compatible with epoch-less requires/conflicts.
CVS patchset: 3323 CVS date: 1999/09/24 14:54:23
This commit is contained in:
parent
cdaf55aa9c
commit
aa3a086ba2
1
CHANGES
1
CHANGES
|
@ -60,6 +60,7 @@
|
|||
- glibc2: permit run time leak detection.
|
||||
- fix: removed files fingerprint memory leak.
|
||||
- fix: resurrect allfiles flag from rpm-2.5.x.
|
||||
- fix: version compares compatible with epoch-less requires/conflicts.
|
||||
|
||||
3.0.1 -> 3.0.2
|
||||
- eliminate armv4 entries from rpmrc (Andrew E. Mileski).
|
||||
|
|
|
@ -299,6 +299,8 @@ static int rpmFlags = RPMSENSE_EQUAL;
|
|||
static int rangesOverlap(const char *AName, const char *AEVR, int AFlags,
|
||||
const char *BName, const char *BEVR, int BFlags)
|
||||
{
|
||||
const char *aDepend = printDepend(AName, AEVR, AFlags);
|
||||
const char *bDepend = printDepend(BName, BEVR, BFlags);
|
||||
char *aEVR, *bEVR;
|
||||
const char *aE, *aV, *aR, *bE, *bV, *bR;
|
||||
int result;
|
||||
|
@ -332,10 +334,11 @@ static int rangesOverlap(const char *AName, const char *AEVR, int AFlags,
|
|||
sense = 0;
|
||||
if (aE && *aE && bE && *bE)
|
||||
sense = rpmvercmp(aE, bE);
|
||||
else if (aE && *aE)
|
||||
sense = 1;
|
||||
else if (bE && *bE)
|
||||
else if (aE && *aE && atol(aE) > 0)
|
||||
sense = 0; /* XXX legacy epoch-less requires/conflicts compatibility */
|
||||
else if (bE && *bE && atol(bE) > 0)
|
||||
sense = -1;
|
||||
|
||||
if (sense == 0) {
|
||||
sense = rpmvercmp(aV, bV);
|
||||
if (sense == 0 && aR && *aR && bR && *bR) {
|
||||
|
@ -359,6 +362,10 @@ static int rangesOverlap(const char *AName, const char *AEVR, int AFlags,
|
|||
}
|
||||
|
||||
exit:
|
||||
rpmMessage(RPMMESS_DEBUG, _(" %s A %s\tB %s\n"),
|
||||
(result ? "YES" : "NO "), aDepend, bDepend);
|
||||
if (aDepend) xfree(aDepend);
|
||||
if (bDepend) xfree(bDepend);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -657,7 +664,8 @@ void rpmdepFreeConflicts(struct rpmDependencyConflict * conflicts, int
|
|||
}
|
||||
|
||||
static /*@exposed@*/ struct availablePackage * alSatisfiesDepend(struct availableList * al,
|
||||
const char * keyName, const char * keyEVR, int keyFlags)
|
||||
const char *keyType, const char *keyDepend,
|
||||
const char * keyName, const char * keyEVR, int keyFlags)
|
||||
{
|
||||
struct availableIndexEntry needle, * match;
|
||||
struct availablePackage *p;
|
||||
|
@ -680,6 +688,8 @@ static /*@exposed@*/ struct availablePackage * alSatisfiesDepend(struct availabl
|
|||
pEVR = buildEVR(p->epoch, p->version, p->release);
|
||||
rc = rangesOverlap(p->name, pEVR, pFlags, keyName, keyEVR, keyFlags);
|
||||
free(pEVR);
|
||||
if (keyType && keyDepend && rc)
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by added package.\n"), keyType, keyDepend);
|
||||
} break;
|
||||
case IET_PROVIDES:
|
||||
for (i = 0; i < p->providesCount; i++) {
|
||||
|
@ -695,9 +705,13 @@ static /*@exposed@*/ struct availablePackage * alSatisfiesDepend(struct availabl
|
|||
keyName, keyEVR, keyFlags);
|
||||
if (rc) break;
|
||||
}
|
||||
if (keyType && keyDepend && rc)
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by added provide.\n"), keyType, keyDepend);
|
||||
break;
|
||||
case IET_FILE:
|
||||
rc = 1;
|
||||
if (keyType && keyDepend && rc)
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by added file list.\n"), keyType, keyDepend);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -709,17 +723,15 @@ static /*@exposed@*/ struct availablePackage * alSatisfiesDepend(struct availabl
|
|||
|
||||
/* 2 == error */
|
||||
/* 1 == dependency not satisfied */
|
||||
static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char * keyName,
|
||||
const char * keyEVR, int keyFlags,
|
||||
/*@out@*/struct availablePackage ** suggestion)
|
||||
static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char *keyType,
|
||||
const char * keyName, const char * keyEVR, int keyFlags,
|
||||
/*@out@*/struct availablePackage ** suggestion)
|
||||
{
|
||||
const char *keyDepend = printDepend(keyName, keyEVR, keyFlags);
|
||||
dbiIndexSet matches;
|
||||
int rc = 0; /* assume dependency is satisfied */
|
||||
int i;
|
||||
|
||||
rpmMessage(RPMMESS_DEBUG, _("dependencies: looking for %s\n"), keyDepend);
|
||||
|
||||
if (suggestion) *suggestion = NULL;
|
||||
|
||||
{ const char * rcProvidesString;
|
||||
|
@ -728,15 +740,18 @@ static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char * keyName,
|
|||
(rcProvidesString = rpmGetVar(RPMVAR_PROVIDES))) {
|
||||
i = strlen(keyName);
|
||||
while ((start = strstr(rcProvidesString, keyName))) {
|
||||
if (isspace(start[i]) || start[i] == '\0' || start[i] == ',')
|
||||
if (isspace(start[i]) || start[i] == '\0' || start[i] == ',') {
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by rpmrc provides.\n"), keyType, keyDepend);
|
||||
goto exit;
|
||||
}
|
||||
rcProvidesString = start + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (alSatisfiesDepend(&rpmdep->addedPackages, keyName, keyEVR, keyFlags))
|
||||
if (alSatisfiesDepend(&rpmdep->addedPackages, keyType, keyDepend, keyName, keyEVR, keyFlags)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (rpmdep->db != NULL) {
|
||||
if (*keyName == '/') {
|
||||
|
@ -753,7 +768,10 @@ static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char * keyName,
|
|||
}
|
||||
|
||||
dbiFreeIndexRecord(matches);
|
||||
if (i < dbiIndexSetCount(matches)) goto exit;
|
||||
if (i < dbiIndexSetCount(matches)) {
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by db file lists.\n"), keyType, keyDepend);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -772,7 +790,10 @@ static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char * keyName,
|
|||
}
|
||||
|
||||
dbiFreeIndexRecord(matches);
|
||||
if (i < dbiIndexSetCount(matches)) goto exit;
|
||||
if (i < dbiIndexSetCount(matches)) {
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by db provides.\n"), keyType, keyDepend);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (!rpmdbFindPackage(rpmdep->db, keyName, &matches)) {
|
||||
|
@ -791,7 +812,10 @@ static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char * keyName,
|
|||
}
|
||||
|
||||
dbiFreeIndexRecord(matches);
|
||||
if (i < dbiIndexSetCount(matches)) goto exit;
|
||||
if (i < dbiIndexSetCount(matches)) {
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by db packages.\n"), keyType, keyDepend);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -799,14 +823,20 @@ static int unsatisfiedDepend(rpmTransactionSet rpmdep, const char * keyName,
|
|||
* version. Provide implicit rpm version in last ditch effort to
|
||||
* satisfy an rpm dependency.
|
||||
*/
|
||||
if (rangesOverlap(keyName, keyEVR, keyFlags, rpmName, rpmEVR, rpmFlags))
|
||||
goto exit;
|
||||
if (!strcmp(keyName, rpmName)) {
|
||||
i = rangesOverlap(keyName, keyEVR, keyFlags, rpmName, rpmEVR, rpmFlags);
|
||||
if (i) {
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s satisfied by rpmlib version.\n"), keyType, keyDepend);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (suggestion)
|
||||
*suggestion = alSatisfiesDepend(&rpmdep->availablePackages, keyName,
|
||||
keyEVR, keyFlags);
|
||||
*suggestion = alSatisfiesDepend(&rpmdep->availablePackages, NULL, NULL,
|
||||
keyName, keyEVR, keyFlags);
|
||||
|
||||
rpmMessage(RPMMESS_DEBUG, _("%s: %s unsatisfied.\n"), keyType, keyDepend);
|
||||
rc = 1; /* dependency is unsatisfied */
|
||||
|
||||
exit:
|
||||
|
@ -850,7 +880,7 @@ static int checkPackageDeps(rpmTransactionSet rpmdep, struct problemsSet * psp,
|
|||
|
||||
keyDepend = printDepend(requires[i], requiresEVR[i], requireFlags[i]);
|
||||
|
||||
rc = unsatisfiedDepend(rpmdep, requires[i], requiresEVR[i],
|
||||
rc = unsatisfiedDepend(rpmdep, " requires", requires[i], requiresEVR[i],
|
||||
requireFlags[i], &suggestion);
|
||||
|
||||
switch (rc) {
|
||||
|
@ -913,7 +943,7 @@ static int checkPackageDeps(rpmTransactionSet rpmdep, struct problemsSet * psp,
|
|||
|
||||
keyDepend = printDepend(conflicts[i], conflictsEVR[i], conflictFlags[i]);
|
||||
|
||||
rc = unsatisfiedDepend(rpmdep, conflicts[i], conflictsEVR[i],
|
||||
rc = unsatisfiedDepend(rpmdep, "conflicts", conflicts[i], conflictsEVR[i],
|
||||
conflictFlags[i], NULL);
|
||||
|
||||
/* 1 == unsatisfied, 0 == satsisfied */
|
||||
|
@ -1087,7 +1117,7 @@ static int addOrderedPack(rpmTransactionSet rpmdep,
|
|||
for (i = 0; rc == 0 && i < requiresCount; i++) {
|
||||
if (!(satisfyDepends || (requireFlags[i] & RPMSENSE_PREREQ)))
|
||||
continue;
|
||||
match = alSatisfiesDepend(&rpmdep->addedPackages,
|
||||
match = alSatisfiesDepend(&rpmdep->addedPackages, NULL, NULL,
|
||||
requires[i], requiresEVR[i], requireFlags[i]);
|
||||
/* broken dependencies don't concern us */
|
||||
if (!match) continue;
|
||||
|
|
|
@ -42,25 +42,37 @@ void rpmMessage(int level, const char * format, ...) {
|
|||
break;
|
||||
|
||||
case RPMMESS_DEBUG:
|
||||
fprintf(stdout, "D: ");
|
||||
if (*format != '+')
|
||||
fprintf(stdout, "D: ");
|
||||
else
|
||||
format++;
|
||||
vfprintf(stdout, format, args);
|
||||
fflush(stdout);
|
||||
break;
|
||||
|
||||
case RPMMESS_WARNING:
|
||||
fprintf(stderr, _("warning: "));
|
||||
if (*format != '+')
|
||||
fprintf(stderr, _("warning: "));
|
||||
else
|
||||
format++;
|
||||
vfprintf(stderr, format, args);
|
||||
fflush(stderr);
|
||||
break;
|
||||
|
||||
case RPMMESS_ERROR:
|
||||
fprintf(stderr, _("error: "));
|
||||
if (*format != '+')
|
||||
fprintf(stderr, _("error: "));
|
||||
else
|
||||
format++;
|
||||
vfprintf(stderr, format, args);
|
||||
fflush(stderr);
|
||||
break;
|
||||
|
||||
case RPMMESS_FATALERROR:
|
||||
fprintf(stderr, _("fatal error: "));
|
||||
if (*format != '+')
|
||||
fprintf(stderr, _("fatal error: "));
|
||||
else
|
||||
format++;
|
||||
vfprintf(stderr, format, args);
|
||||
fflush(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
|
|
69
po/rpm.pot
69
po/rpm.pot
|
@ -6,7 +6,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"POT-Creation-Date: 1999-09-23 18:29-0400\n"
|
||||
"POT-Creation-Date: 1999-09-24 10:26-0400\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"
|
||||
|
@ -1972,33 +1972,78 @@ msgstr ""
|
|||
msgid "error removing record %s into %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:450
|
||||
#: ../lib/depends.c:365
|
||||
#, c-format
|
||||
msgid " %s A %s\tB %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:457
|
||||
msgid "dbrecMatchesDepFlags() failed to read header"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:721
|
||||
#: ../lib/depends.c:691
|
||||
#, c-format
|
||||
msgid "dependencies: looking for %s\n"
|
||||
msgid "%s: %s satisfied by added package.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:708
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by added provide.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:713
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by added file list.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:743
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by rpmrc provides.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:771
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by db file lists.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:793
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by db provides.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:815
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by db packages.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:828
|
||||
#, c-format
|
||||
msgid "%s: %s satisfied by rpmlib version.\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:838
|
||||
#, c-format
|
||||
msgid "%s: %s unsatisfied.\n"
|
||||
msgstr ""
|
||||
|
||||
#. requirements are not satisfied.
|
||||
#: ../lib/depends.c:860
|
||||
#: ../lib/depends.c:889
|
||||
#, c-format
|
||||
msgid "package %s require not satisfied: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#. conflicts exist.
|
||||
#: ../lib/depends.c:922
|
||||
#: ../lib/depends.c:951
|
||||
#, c-format
|
||||
msgid "package %s conflicts: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:977 ../lib/depends.c:1281
|
||||
#: ../lib/depends.c:1006 ../lib/depends.c:1310
|
||||
#, c-format
|
||||
msgid "cannot read header at %d for dependency check"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/depends.c:1072
|
||||
#: ../lib/depends.c:1101
|
||||
#, c-format
|
||||
msgid "loop in prerequisite chain: %s"
|
||||
msgstr ""
|
||||
|
@ -2361,19 +2406,19 @@ msgstr ""
|
|||
msgid "File %s is smaller than %d bytes"
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/messages.c:51
|
||||
#: ../lib/messages.c:55
|
||||
msgid "warning: "
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/messages.c:57
|
||||
#: ../lib/messages.c:64
|
||||
msgid "error: "
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/messages.c:63
|
||||
#: ../lib/messages.c:73
|
||||
msgid "fatal error: "
|
||||
msgstr ""
|
||||
|
||||
#: ../lib/messages.c:70
|
||||
#: ../lib/messages.c:82
|
||||
msgid "internal error (rpm bug?): "
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -42,25 +42,37 @@ void rpmMessage(int level, const char * format, ...) {
|
|||
break;
|
||||
|
||||
case RPMMESS_DEBUG:
|
||||
fprintf(stdout, "D: ");
|
||||
if (*format != '+')
|
||||
fprintf(stdout, "D: ");
|
||||
else
|
||||
format++;
|
||||
vfprintf(stdout, format, args);
|
||||
fflush(stdout);
|
||||
break;
|
||||
|
||||
case RPMMESS_WARNING:
|
||||
fprintf(stderr, _("warning: "));
|
||||
if (*format != '+')
|
||||
fprintf(stderr, _("warning: "));
|
||||
else
|
||||
format++;
|
||||
vfprintf(stderr, format, args);
|
||||
fflush(stderr);
|
||||
break;
|
||||
|
||||
case RPMMESS_ERROR:
|
||||
fprintf(stderr, _("error: "));
|
||||
if (*format != '+')
|
||||
fprintf(stderr, _("error: "));
|
||||
else
|
||||
format++;
|
||||
vfprintf(stderr, format, args);
|
||||
fflush(stderr);
|
||||
break;
|
||||
|
||||
case RPMMESS_FATALERROR:
|
||||
fprintf(stderr, _("fatal error: "));
|
||||
if (*format != '+')
|
||||
fprintf(stderr, _("fatal error: "));
|
||||
else
|
||||
format++;
|
||||
vfprintf(stderr, format, args);
|
||||
fflush(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
|
|
Loading…
Reference in New Issue