rpm/rpm-5.4.5-update-rpmfc-when-removing-overlapping-dependencies.patch
2013-03-27 12:51:15 +04:00

81 lines
3.5 KiB
Diff

--- rpm-5.4.5/build/reqprov.c.fc_overlap~ 2012-03-02 13:44:16.088580152 +0100
+++ rpm-5.4.5/build/reqprov.c 2012-03-02 13:59:18.740030066 +0100
@@ -158,11 +158,10 @@ int addReqProv(/*@unused@*/ Spec spec, H
he->p.argv = versions;
xx = headerMod(h, he, 0);
rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(old), rpmdsDNEVR(new), rpmdsDNEVR(old));
- } else if (res < 0) {
+ } else if (res < 0)
rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new));
- } else {
- rpmlog(RPMLOG_DEBUG, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(new), rpmdsDNEVR(old), rpmdsDNEVR(new));
- }
+ else if (flags[len] != Flags)
+ 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.5/lib/rpmfc.c.fc_overlap~ 2012-03-01 18:00:49.989188179 +0100
+++ rpm-5.4.5/lib/rpmfc.c 2012-03-01 19:53:37.145561224 +0100
@@ -518,7 +518,7 @@ assert(EVR != NULL);
* build/reqprov.c:addReqProv()
*/
int overlap = 0, res = 0;
- if (*depsp && rpmExpandNumeric("%{?_use_internal_dependency_generator}")) {
+ if (*depsp) {
int ix = rpmdsSearch(*depsp, ds);
if (ix >= 0) {
/* do not consider dependency ranges like R: foo > 1, R: foo < 3
@@ -550,18 +550,33 @@ assert(EVR != NULL);
rEVR->Flags = (*depsp)->Flags[(*depsp)->i];
res = rpmEVRcompare(lEVR, rEVR);
- if (res > 0) {
- (*depsp)->Flags[(*depsp)->i] = Flags;
- (*depsp)->EVR[(*depsp)->i] = EVR;
- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(*depsp), rpmdsDNEVR(ds), rpmdsDNEVR(*depsp));
- } else if (res < 0) {
- rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds));
- } else {
- rpmlog(RPMLOG_DEBUG, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds));
+ if (res == 0 && rpmdsFlags(*depsp) == rpmdsFlags(ds))
+ overlap = 0;
+ else {
+ char *oldVal = xstrdup(strchr(rpmfcFileDep(buf, fc->ix, *depsp), ' '));
+ if (res > 0) {
+ (*depsp)->Flags[(*depsp)->i] = Flags;
+ (*depsp)->EVR[(*depsp)->i] = EVR;
+ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(*depsp), rpmdsDNEVR(ds), rpmdsDNEVR(*depsp));
+ } else if (res < 0)
+ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds));
+ else
+ rpmlog(RPMLOG_WARNING, "%s overlaps %s, removing %s and merging flags\n", rpmdsDNEVR(ds), rpmdsDNEVR(*depsp), rpmdsDNEVR(ds));
+
+ (*depsp)->Flags[(*depsp)->i] |= newflags;
+
+ /* update references in dictionary */
+ for (ix = 0; ix < argvCount(fc->ddict); ix++) {
+ if (!strcmp(strchr(fc->ddict[ix], ' '), oldVal)) {
+ size_t fcix = atol(fc->ddict[ix]);
+ _free(fc->ddict[ix]);
+ fc->ddict[ix] = xstrdup(rpmfcFileDep(buf, fcix, *depsp));
+ }
+ }
+ argvSort(fc->ddict, NULL);
+ free(oldVal);
}
- (*depsp)->Flags[(*depsp)->i] |= newflags;
-
lEVR = rpmEVRfree(lEVR);
rEVR = rpmEVRfree(rEVR);
}
@@ -573,7 +588,7 @@ assert(EVR != NULL);
xx = rpmdsMerge(depsp, ds);
/* Add to file dependencies. */
- xx = rpmfcSaveArg(&fc->ddict, rpmfcFileDep(buf, fc->ix, ds));
+ xx = rpmfcSaveArg(&fc->ddict, rpmfcFileDep(buf, fc->ix, overlap ? *depsp : ds));
(void)rpmdsFree(ds);
ds = NULL;