rpm/rpm-5.4.7-always-choose-equal-only-deps-when-overlapping.patch
2012-04-27 04:55:39 +04:00

70 lines
4.3 KiB
Diff

--- rpm-5.4.7/build/reqprov.c.equal_overlap~ 2012-03-13 15:06:59.272736274 +0100
+++ rpm-5.4.7/build/reqprov.c 2012-03-13 16:37:17.389488443 +0100
@@ -128,12 +128,14 @@ int addReqProv(/*@unused@*/ Spec spec, H
#define RPMSENSE_SCRIPTS (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_VERIFY)
if (!((Flags & RPMSENSE_GREATER && flags[len] & RPMSENSE_LESS) ||
(Flags & RPMSENSE_LESS && flags[len] & RPMSENSE_GREATER)) &&
+ /* R: foo >= 1 cannot overlap R: foo <= 1*/
+ !(((Flags & RPMSENSE_GREATER) && (flags[len] & RPMSENSE_LESS)) ||
+ ((flags[len] & RPMSENSE_GREATER) && (Flags & RPMSENSE_LESS))) &&
/* do not merge script dependencies with non-script dependencies */
!(((Flags & RPMSENSE_SCRIPTS) && !(flags[len] & RPMSENSE_SCRIPTS)) ||
((flags[len] & RPMSENSE_SCRIPTS) && !(Flags & RPMSENSE_SCRIPTS))))
overlap = rpmdsCompare(new, old);
#undef RPMSENSE_SCRIPTS
-
if (overlap) {
EVR_t lEVR = rpmEVRnew(RPMSENSE_ANY, 0),
rEVR = rpmEVRnew(RPMSENSE_ANY, 0);
@@ -165,8 +167,11 @@ int addReqProv(/*@unused@*/ Spec spec, H
rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(old), rpmdsDNEVR(new), rpmdsDNEVR(old));
} else if (res < 0)
rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new));
- else if (flags[len] != Flags)
+ else if (flags[len] != Flags) {
+ if (((Flags & RPMSENSE_SENSEMASK) == RPMSENSE_EQUAL && (flags[len] & (RPMSENSE_GREATER|RPMSENSE_LESS))))
+ flags[len] &= ~(RPMSENSE_GREATER|RPMSENSE_LESS);
rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new));
+ }
flags[len] |= newflags;
he->tag = flagtag;
--- rpm-5.4.7/lib/rpmfc.c.equal_overlap~ 2012-03-13 15:07:42.416787385 +0100
+++ rpm-5.4.7/lib/rpmfc.c 2012-03-13 16:37:24.110497118 +0100
@@ -502,11 +502,12 @@ assert(EVR != NULL);
ds = rpmdsSingle(tagN, N, EVR, Flags);
+ int overlap = 0;
#if defined(RPM_VENDOR_MANDRIVA) /* filter-overlapping-dependencies */
/* XXX: should really share same code path as with what's in
* build/reqprov.c:addReqProv()
*/
- int overlap = 0, res = 0;
+ int res = 0;
if (*depsp) {
int ix = rpmdsSearch(*depsp, ds);
if (ix >= 0) {
@@ -516,6 +517,9 @@ assert(EVR != NULL);
#define RPMSENSE_SCRIPTS (RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN|RPMSENSE_SCRIPT_VERIFY)
if (!((Flags & RPMSENSE_GREATER && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_LESS) ||
(Flags & RPMSENSE_LESS && (*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER)) &&
+ /* R: foo >= 1 cannot overlap R: foo <= 1*/
+ !(((Flags & RPMSENSE_GREATER) && ((*depsp)->Flags[(*depsp)->i] & RPMSENSE_LESS)) ||
+ (((*depsp)->Flags[(*depsp)->i] & RPMSENSE_GREATER) && (Flags & RPMSENSE_LESS))) &&
/* do not merge script dependencies with non-script dependencies */
!(((Flags & RPMSENSE_SCRIPTS) && !((*depsp)->Flags[(*depsp)->i] & RPMSENSE_SCRIPTS)) ||
(((*depsp)->Flags[(*depsp)->i] & RPMSENSE_SCRIPTS) && !(Flags & RPMSENSE_SCRIPTS))))
@@ -554,8 +558,11 @@ assert(EVR != NULL);
rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp));
} else if (res < 0)
rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds));
- else
+ else if ((*depsp)->Flags[(*depsp)->i] != Flags) {
+ if (((Flags & RPMSENSE_SENSEMASK) == RPMSENSE_EQUAL) && ((*depsp)->Flags[(*depsp)->i] & (RPMSENSE_GREATER|RPMSENSE_LESS)))
+ (*depsp)->Flags[(*depsp)->i] &= ~(RPMSENSE_GREATER|RPMSENSE_LESS);
rpmlog(RPMLOG_WARNING, "%s (%s) overlaps %s (%s), removing %s and merging flags\n", rpmdsDNEVR(ds), fc->fn[fc->ix] + fc->brlen, rpmdsDNEVR(*depsp), ix < (int)fc->nfiles ? fc->fn[ix] + fc->brlen : "explicit", rpmdsDNEVR(ds));
+ }
(*depsp)->Flags[(*depsp)->i] |= newflags;