Also compare the name and not only the version when checking if two packages are the same. rh#104066 Index: lib/depends.c =================================================================== --- lib/depends.c.orig +++ lib/depends.c @@ -102,6 +102,24 @@ static int removePackage(rpmts ts, Heade return 0; } +static int rpmNameVersionCompare(Header first, Header second) +{ + const char * one, * two; + int rc; + + rc = headerGetEntry(first, RPMTAG_NAME, NULL, (void **) &one, NULL); + rc = headerGetEntry(second, RPMTAG_NAME, NULL, (void **) &two, NULL); + rc = strcmp(one, two); + if (rc) + return rc; + rc = headerGetEntry(first, RPMTAG_ARCH, NULL, (void **) &one, NULL); + rc = headerGetEntry(second, RPMTAG_ARCH, NULL, (void **) &two, NULL); + rc = strcmp(one, two); + if (rc) + return rc; + return rpmVersionCompare(first, second); +} + int rpmtsAddInstallElement(rpmts ts, Header h, fnpyKey key, int upgrade, rpmRelocation * relocs) { @@ -291,7 +309,7 @@ addheader: continue; /* Skip packages that contain identical NEVR. */ - if (rpmVersionCompare(h, oh) == 0) + if (rpmNameVersionCompare(h, oh) == 0) continue; xx = removePackage(ts, oh, pkgKey); @@ -342,11 +360,9 @@ addheader: * If no obsoletes version info is available, match all names. */ if (rpmdsEVR(obsoletes) == NULL - || rpmdsAnyMatchesDep(oh, obsoletes, _rpmds_nopromote)) { + || rpmdsNVRMatchesDep(oh, obsoletes, _rpmds_nopromote)) { char * ohNEVRA = headerGetNEVRA(oh, NULL); -#ifdef DYING /* XXX see http://bugzilla.redhat.com #134497 */ - if (rpmVersionCompare(h, oh)) -#endif + if (rpmNameVersionCompare(h, oh)) xx = removePackage(ts, oh, pkgKey); rpmlog(RPMLOG_DEBUG, " Obsoletes: %s\t\terases %s\n", rpmdsDNEVR(obsoletes)+2, ohNEVRA);