From: Michael Schroeder Date: Mon, 21 Jul 2008 16:52:08 +0000 (+0000) Subject: - no more freshens. R.I.P. X-Git-Tag: BASE-SuSE-Code-12_1-Branch~308^2~295 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba9e3357e853bea6ff2b3fc0547e89ecc2cf770b;p=thirdparty%2Flibsolv.git - no more freshens. R.I.P. --- diff --git a/src/knownid.h b/src/knownid.h index f8eaee10..746fc388 100644 --- a/src/knownid.h +++ b/src/knownid.h @@ -38,7 +38,6 @@ KNOWNID(SOLVABLE_RECOMMENDS, "solvable:recommends"), KNOWNID(SOLVABLE_SUGGESTS, "solvable:suggests"), KNOWNID(SOLVABLE_SUPPLEMENTS, "solvable:supplements"), KNOWNID(SOLVABLE_ENHANCES, "solvable:enhances"), -KNOWNID(SOLVABLE_FRESHENS, "solvable:freshens"), KNOWNID(RPM_RPMDBID, "rpm:dbid"), /* normal requires before this, prereqs after this */ KNOWNID(SOLVABLE_PREREQMARKER, "solvable:prereqmarker"), diff --git a/src/pool.c b/src/pool.c index 8223780d..d14c27fb 100644 --- a/src/pool.c +++ b/src/pool.c @@ -907,8 +907,6 @@ pool_addfileprovides_ids(Pool *pool, Repo *installed, Id **idp) pool_addfileprovides_dep(pool, repo->idarraydata + s->supplements, &sf, isfp); if (s->enhances) pool_addfileprovides_dep(pool, repo->idarraydata + s->enhances, &sf, isfp); - if (s->freshens) - pool_addfileprovides_dep(pool, repo->idarraydata + s->freshens, &sf, isfp); } map_free(&sf.seen); map_free(&isf.seen); diff --git a/src/repo.c b/src/repo.c index 913f8ce4..cae33970 100644 --- a/src/repo.c +++ b/src/repo.c @@ -316,7 +316,7 @@ repo_freeallrepos(Pool *pool, int reuseids) } Offset -repo_fix_legacy(Repo *repo, Offset provides, Offset supplements) +repo_fix_legacy(Repo *repo, Offset provides, Offset supplements, Offset freshens) { Pool *pool = repo->pool; Id id, idp, idl; @@ -403,81 +403,107 @@ repo_fix_legacy(Repo *repo, Offset provides, Offset supplements) } } } - if (!supplements) - return 0; - for (i = supplements; repo->idarraydata[i]; i++) + if (supplements) { - id = repo->idarraydata[i]; - if (ISRELDEP(id)) - continue; - dep = (char *)id2str(pool, id); - if (!strncmp(dep, "system:modalias(", 16)) - dep += 7; - if (!strncmp(dep, "modalias(", 9) && dep[9] && dep[10] && strlen(dep) < sizeof(buf)) + for (i = supplements; repo->idarraydata[i]; i++) { - strcpy(buf, dep); - p = strchr(buf + 9, ':'); - if (p && p != buf + 9 && strchr(p + 1, ':')) - { - *p++ = 0; - idp = str2id(pool, buf + 9, 1); - p[strlen(p) - 1] = 0; - id = str2id(pool, p, 1); - id = rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); - id = rel2id(pool, idp, id, REL_AND, 1); - } - else + id = repo->idarraydata[i]; + if (ISRELDEP(id)) + continue; + dep = (char *)id2str(pool, id); + if (!strncmp(dep, "system:modalias(", 16)) + dep += 7; + if (!strncmp(dep, "modalias(", 9) && dep[9] && dep[10] && strlen(dep) < sizeof(buf)) { - p = buf + 9; - p[strlen(p) - 1] = 0; - id = str2id(pool, p, 1); - id = rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); + strcpy(buf, dep); + p = strchr(buf + 9, ':'); + if (p && p != buf + 9 && strchr(p + 1, ':')) + { + *p++ = 0; + idp = str2id(pool, buf + 9, 1); + p[strlen(p) - 1] = 0; + id = str2id(pool, p, 1); + id = rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); + id = rel2id(pool, idp, id, REL_AND, 1); + } + else + { + p = buf + 9; + p[strlen(p) - 1] = 0; + id = str2id(pool, p, 1); + id = rel2id(pool, NAMESPACE_MODALIAS, id, REL_NAMESPACE, 1); + } + if (id) + repo->idarraydata[i] = id; } - if (id) - repo->idarraydata[i] = id; - } - else if (!strncmp(dep, "packageand(", 11) && strlen(dep) < sizeof(buf)) - { - strcpy(buf, dep); - id = 0; - dep = buf + 11; - while ((p = strchr(dep, ':')) != 0) + else if (!strncmp(dep, "packageand(", 11) && strlen(dep) < sizeof(buf)) { - if (p == dep) + strcpy(buf, dep); + id = 0; + dep = buf + 11; + while ((p = strchr(dep, ':')) != 0) + { + if (p == dep) + { + dep = p + 1; + continue; + } + *p++ = 0; + idp = str2id(pool, dep, 1); + if (id) + id = rel2id(pool, id, idp, REL_AND, 1); + else + id = idp; + dep = p; + } + if (dep[0] && dep[1]) { - dep = p + 1; - continue; + dep[strlen(dep) - 1] = 0; + idp = str2id(pool, dep, 1); + if (id) + id = rel2id(pool, id, idp, REL_AND, 1); + else + id = idp; } - *p++ = 0; - idp = str2id(pool, dep, 1); if (id) - id = rel2id(pool, id, idp, REL_AND, 1); - else - id = idp; - dep = p; + repo->idarraydata[i] = id; } - if (dep[0] && dep[1]) + else if (!strncmp(dep, "filesystem(", 11) && strlen(dep) < sizeof(buf)) { - dep[strlen(dep) - 1] = 0; - idp = str2id(pool, dep, 1); - if (id) - id = rel2id(pool, id, idp, REL_AND, 1); - else - id = idp; + strcpy(buf, dep + 11); + if ((p = strrchr(buf, ')')) != 0) + *p = 0; + id = str2id(pool, buf, 1); + id = rel2id(pool, NAMESPACE_FILESYSTEM, id, REL_NAMESPACE, 1); + repo->idarraydata[i] = id; } - if (id) - repo->idarraydata[i] = id; - } - else if (!strncmp(dep, "filesystem(", 11) && strlen(dep) < sizeof(buf)) - { - strcpy(buf, dep + 11); - if ((p = strrchr(buf, ')')) != 0) - *p = 0; - id = str2id(pool, buf, 1); - id = rel2id(pool, NAMESPACE_FILESYSTEM, id, REL_NAMESPACE, 1); - repo->idarraydata[i] = id; } } + if (freshens && repo->idarraydata[freshens]) + { + Id idsupp = 0, idfresh = 0; + if (!supplements) + return freshens; + for (i = supplements; repo->idarraydata[i]; i++) + { + if (!idsupp) + idsupp = repo->idarraydata[i]; + else + idsupp = rel2id(pool, idsupp, repo->idarraydata[i], REL_OR, 1); + } + for (i = freshens; repo->idarraydata[i]; i++) + { + if (!idfresh) + idfresh = repo->idarraydata[i]; + else + idfresh = rel2id(pool, idfresh, repo->idarraydata[i], REL_OR, 1); + } + if (!idsupp) + idsupp = idfresh; + else + idsupp = rel2id(pool, idsupp, idfresh, REL_AND, 1); + supplements = repo_addid_dep(repo, 0, idsupp, 0); + } return supplements; } @@ -573,7 +599,6 @@ static Repokey solvablekeys[RPM_RPMDBID - SOLVABLE_NAME + 1] = { { SOLVABLE_SUGGESTS, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, { SOLVABLE_SUPPLEMENTS, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, { SOLVABLE_ENHANCES, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, - { SOLVABLE_FRESHENS, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, { RPM_RPMDBID, REPOKEY_TYPE_U32, 0, KEY_STORAGE_SOLVABLE }, }; @@ -693,11 +718,6 @@ repo_search_md(Repo *repo, Id p, Id keyname, struct matchdata *md) domatch_idarray(s, SOLVABLE_ENHANCES, md, repo->idarraydata + s->enhances); if (keyname || md->stop > SEARCH_NEXT_KEY) return; - case SOLVABLE_FRESHENS: - if (s->freshens) - domatch_idarray(s, SOLVABLE_FRESHENS, md, repo->idarraydata + s->freshens); - if (keyname || md->stop > SEARCH_NEXT_KEY) - return; case RPM_RPMDBID: if (repo->rpmdbid) { diff --git a/src/repo.h b/src/repo.h index ab0e7611..8645aed8 100644 --- a/src/repo.h +++ b/src/repo.h @@ -61,7 +61,7 @@ extern void repo_freeallrepos(Pool *pool, int reuseids); extern Offset repo_addid(Repo *repo, Offset olddeps, Id id); extern Offset repo_addid_dep(Repo *repo, Offset olddeps, Id id, Id marker); extern Offset repo_reserve_ids(Repo *repo, Offset olddeps, int num); -extern Offset repo_fix_legacy(Repo *repo, Offset provides, Offset supplements); +extern Offset repo_fix_legacy(Repo *repo, Offset provides, Offset supplements, Offset freshens); static inline const char *repo_name(const Repo *repo) { diff --git a/src/repo_helix.c b/src/repo_helix.c index aa6cadc7..c9955451 100644 --- a/src/repo_helix.c +++ b/src/repo_helix.c @@ -146,6 +146,7 @@ typedef struct _parsedata { Repo *repo; // current repo Repodata *data; // current repo data Solvable *solvable; // current solvable + Offset freshens; // current freshens vector // package data int epoch; // epoch (as offset into evrspace) @@ -455,6 +456,7 @@ startElement(void *userData, const char *name, const char **atts) pd->epoch = 0; pd->version = 0; pd->release = 0; + pd->freshens = 0; #if 0 fprintf(stderr, "package #%d\n", s - pool->solvables); #endif @@ -516,10 +518,10 @@ startElement(void *userData, const char *name, const char **atts) s->enhances = adddep(pool, pd, s->enhances, atts, 0); break; case STATE_FRESHENS: - s->freshens = 0; + pd->freshens = 0; break; case STATE_FRESHENSENTRY: - s->freshens = adddep(pool, pd, s->freshens, atts, 0); + pd->freshens = adddep(pool, pd, pd->freshens, atts, 0); break; default: break; @@ -620,7 +622,8 @@ endElement(void *userData, const char *name) /* ensure self-provides */ if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); - s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements, pd->freshens); + pd->freshens = 0; /* see bugzilla bnc#190163 */ const char *flavor = findKernelFlavor(pd, s); diff --git a/src/repo_solv.c b/src/repo_solv.c index 85e71e68..99a3f21c 100644 --- a/src/repo_solv.c +++ b/src/repo_solv.c @@ -29,7 +29,7 @@ #include "repopack.h" #define INTERESTED_START SOLVABLE_NAME -#define INTERESTED_END SOLVABLE_FRESHENS +#define INTERESTED_END SOLVABLE_ENHANCES #define SOLV_ERROR_NOT_SOLV 1 #define SOLV_ERROR_UNSUPPORTED 2 @@ -1453,8 +1453,6 @@ repo_add_solv_parent(Repo *repo, FILE *fp, Repodata *parent) s->suggests = ido; else if (id == SOLVABLE_ENHANCES) s->enhances = ido; - else if (id == SOLVABLE_FRESHENS) - s->freshens = ido; #if 0 POOL_DEBUG(SAT_DEBUG_STATS, "%s ->\n", id2str(pool, id)); for (; repo->idarraydata[ido]; ido++) diff --git a/src/repodata.c b/src/repodata.c index 387a16a0..c902895a 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -848,7 +848,6 @@ static Repokey solvablekeys[RPM_RPMDBID - SOLVABLE_NAME + 1] = { { SOLVABLE_SUGGESTS, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, { SOLVABLE_SUPPLEMENTS, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, { SOLVABLE_ENHANCES, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, - { SOLVABLE_FRESHENS, REPOKEY_TYPE_IDARRAY, 0, KEY_STORAGE_SOLVABLE }, { RPM_RPMDBID, REPOKEY_TYPE_U32, 0, KEY_STORAGE_SOLVABLE }, }; @@ -944,10 +943,6 @@ restart: di->idp = s->enhances ? di->repo->idarraydata + s->enhances : 0; continue; - case SOLVABLE_FRESHENS: - di->idp = s->freshens - ? di->repo->idarraydata + s->freshens : 0; - continue; case RPM_RPMDBID: if (!di->repo->rpmdbid) continue; diff --git a/src/solvable.h b/src/solvable.h index 785128da..60e7e7d7 100644 --- a/src/solvable.h +++ b/src/solvable.h @@ -38,7 +38,6 @@ typedef struct _Solvable { Offset supplements; Offset enhances; - Offset freshens; } Solvable; #endif /* SATSOLVER_SOLVABLE_H */ diff --git a/src/solver.c b/src/solver.c index 90a79ddc..545ee1d9 100644 --- a/src/solver.c +++ b/src/solver.c @@ -1022,50 +1022,6 @@ disableupdaterules(Solver *solv, Queue *job, int jobidx) } } -#if CODE10 -/*------------------------------------------------------------------- - * add patch atom requires - */ - -static void -addpatchatomrequires(Solver *solv, Solvable *s, Id *dp, Queue *q, Map *m) -{ - Pool *pool = solv->pool; - Id fre, *frep, p, *pp, ndp; - Solvable *ps; - Queue fq; - Id qbuf[64]; - int i, used = 0; - - queue_init_buffer(&fq, qbuf, sizeof(qbuf)/sizeof(*qbuf)); - queue_push(&fq, -(s - pool->solvables)); - for (; *dp; dp++) - queue_push(&fq, *dp); - ndp = pool_queuetowhatprovides(pool, &fq); - frep = s->repo->idarraydata + s->freshens; - while ((fre = *frep++) != 0) - { - FOR_PROVIDES(p, pp, fre) - { - ps = pool->solvables + p; - addrule(solv, -p, ndp); - used = 1; - if (!MAPTST(m, p)) - queue_push(q, p); - } - } - if (used) - { - for (i = 1; i < fq.count; i++) - { - p = fq.elements[i]; - if (!MAPTST(m, p)) - queue_push(q, p); - } - } - queue_free(&fq); -} -#endif /*------------------------------------------------------------------- @@ -1158,15 +1114,6 @@ addrpmrulesforsolvable(Solver *solv, Solvable *s, Map *m) POOL_DEBUG(SAT_DEBUG_RULE_CREATION, "package %s [%d] is not installable\n", solvable2str(pool, s), (Id)(s - pool->solvables)); addrule(solv, -n, 0); /* uninstallable */ } -#if CODE10 - patchatom = 0; - if (s->freshens && !s->supplements) - { - const char *name = id2str(pool, s->name); - if (name[0] == 'a' && !strncmp(name, "atom:", 5)) - patchatom = 1; - } -#endif /*----------------------------------------- * check requires of s @@ -1377,17 +1324,6 @@ addrpmrulesforweak(Solver *solv, Map *m) break; } - /* if nothing found, check for freshens - * (patterns use this) - */ - if (!sup && s->freshens) - { - supp = s->repo->idarraydata + s->freshens; - while ((sup = *supp++) != ID_NULL) - if (dep_possible(solv, sup, m)) - break; - } - /* if nothing found, check for enhances */ if (!sup && s->enhances) { @@ -1396,7 +1332,7 @@ addrpmrulesforweak(Solver *solv, Map *m) if (dep_possible(solv, sup, m)) break; } - /* if notthing found, goto next solvables */ + /* if nothing found, goto next solvables */ if (!sup) continue; addrpmrulesforsolvable(solv, s, m); @@ -2658,7 +2594,7 @@ run_solver(Solver *solv, int disablerules, int doweak) else { s = pool->solvables + i; - if (!s->supplements && !s->freshens) + if (!s->supplements) continue; if (!pool_installable(pool, s)) continue; @@ -2687,7 +2623,7 @@ run_solver(Solver *solv, int disablerules, int doweak) { p = dqs.elements[i]; s = pool->solvables + p; - if (!s->supplements && !s->freshens) + if (!s->supplements) continue; if (!solver_is_supplementing(solv, s)) queue_pushunique(&dq, p); @@ -3896,7 +3832,7 @@ solver_solve(Solver *solv, Queue *job) oldnrules = solv->nrules; /* - * add rules for suggests, [freshens,] enhances + * add rules for suggests, enhances */ addrpmrulesforweak(solv, &addedmap); POOL_DEBUG(SAT_DEBUG_STATS, "added %d rpm rules because of weak dependencies\n", solv->nrules - oldnrules); @@ -3953,17 +3889,6 @@ solver_solve(Solver *solv, Queue *job) addrule(solv, 0, 0); /* create dummy rule */ continue; } -#if CODE10 - if (s->freshens && !s->supplements) - { - const char *name = id2str(pool, s->name); - if (name[0] == 'a' && !strncmp(name, "atom:", 5)) - { - addrule(solv, 0, 0); - continue; - } - } -#endif addupdaterule(solv, s, 1); /* allow s to be updated */ } /* @@ -3998,18 +3923,6 @@ solver_solve(Solver *solv, Queue *job) continue; } -#if CODE10 - /* no update rules for patch atoms */ - if (s->freshens && !s->supplements) - { - const char *name = id2str(pool, s->name); - if (name[0] == 'a' && !strncmp(name, "atom:", 5)) - { - addrule(solv, 0, 0); - continue; - } - } -#endif addupdaterule(solv, s, 0); /* allowall = 0: downgrades allowed */ /* diff --git a/src/solver.h b/src/solver.h index 4d7c6e3e..82f0eb7d 100644 --- a/src/solver.h +++ b/src/solver.h @@ -289,27 +289,13 @@ static inline int solver_is_supplementing(Solver *solv, Solvable *s) { Id sup, *supp; - if (!s->supplements && !s->freshens) + if (!s->supplements) return 0; - if (s->supplements) - { - supp = s->repo->idarraydata + s->supplements; - while ((sup = *supp++) != 0) - if (solver_dep_fulfilled(solv, sup)) - break; - if (!sup) - return 0; - } - if (s->freshens) - { - supp = s->repo->idarraydata + s->freshens; - while ((sup = *supp++) != 0) - if (solver_dep_fulfilled(solv, sup)) - break; - if (!sup) - return 0; - } - return 1; + supp = s->repo->idarraydata + s->supplements; + while ((sup = *supp++) != 0) + if (solver_dep_fulfilled(solv, sup)) + return 1; + return 0; } static inline int diff --git a/tools/dumpsolv.c b/tools/dumpsolv.c index ffc624c0..ec37bbe8 100644 --- a/tools/dumpsolv.c +++ b/tools/dumpsolv.c @@ -291,7 +291,6 @@ int main(int argc, char **argv) printids(repo, "suggests", s->suggests); printids(repo, "supplements", s->supplements); printids(repo, "enhances", s->enhances); - printids(repo, "freshens", s->freshens); if (repo->rpmdbid) printf("rpmdbid: %u\n", repo->rpmdbid[i - repo->start]); #if 0 diff --git a/tools/repo_content.c b/tools/repo_content.c index 36ed85fe..b39b4f7c 100644 --- a/tools/repo_content.c +++ b/tools/repo_content.c @@ -230,7 +230,7 @@ repo_add_content(Repo *repo, FILE *fp) if (s && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); if (s) - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0); /* Only support one product. */ s = pool_id2solvable(pool, repo_add_solvable(repo)); repodata_extend(data, s - pool->solvables); @@ -319,7 +319,7 @@ repo_add_content(Repo *repo, FILE *fp) if (s && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); if (s) - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0); if (pd.tmp) sat_free(pd.tmp); diff --git a/tools/repo_patchxml.c b/tools/repo_patchxml.c index aed69ed8..0465b8b9 100644 --- a/tools/repo_patchxml.c +++ b/tools/repo_patchxml.c @@ -148,6 +148,7 @@ struct parsedata { unsigned int datanum; Solvable *solvable; char *kind; + Offset freshens; unsigned int timestamp; struct stateswitch *swtab[NUMSTATES]; @@ -407,6 +408,7 @@ startElement(void *userData, const char *name, const char **atts) pd->kind = "patch"; pd->solvable = pool_id2solvable(pool, repo_add_solvable(pd->repo)); + pd->freshens = 0; if (!strcmp(pd->kind, "patch")) { @@ -574,10 +576,10 @@ startElement(void *userData, const char *name, const char **atts) s->enhances = adddep(pool, pd, s->enhances, atts, 0); break; case STATE_FRESHENS: - s->freshens = 0; + pd->freshens = 0; break; case STATE_FRESHENSENTRY: - s->freshens = adddep(pool, pd, s->freshens, atts, 0); + pd->freshens = adddep(pool, pd, pd->freshens, atts, 0); break; case STATE_REBOOT: repodata_set_void(pd->data, pd->datanum, UPDATE_REBOOT); @@ -618,7 +620,8 @@ endElement(void *userData, const char *name) s->arch = ARCH_NOARCH; if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(pd->repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); - s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements, pd->freshens); + pd->freshens = 0; break; case STATE_NAME: s->name = str2id(pool, pd->content, 1); diff --git a/tools/repo_rpmdb.c b/tools/repo_rpmdb.c index acff75e9..c27d4883 100644 --- a/tools/repo_rpmdb.c +++ b/tools/repo_rpmdb.c @@ -837,8 +837,7 @@ rpm2solv(Pool *pool, Repo *repo, Repodata *repodata, Solvable *s, RpmHead *rpmhe s->suggests = makedeps(pool, repo, rpmhead, TAG_SUGGESTSNAME, TAG_SUGGESTSVERSION, TAG_SUGGESTSFLAGS, 1); s->supplements = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, 2); s->enhances = makedeps(pool, repo, rpmhead, TAG_ENHANCESNAME, TAG_ENHANCESVERSION, TAG_ENHANCESFLAGS, 1); - s->freshens = 0; - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, 0); if (repodata) { @@ -1107,7 +1106,6 @@ solvable_copy(Solvable *s, Solvable *r, Repodata *data, Id *dircache) s->suggests = copydeps(pool, repo, r->suggests, fromrepo); s->supplements = copydeps(pool, repo, r->supplements, fromrepo); s->enhances = copydeps(pool, repo, r->enhances, fromrepo); - s->freshens = copydeps(pool, repo, r->freshens, fromrepo); /* copy all attributes */ if (!data) diff --git a/tools/repo_rpmmd.c b/tools/repo_rpmmd.c index 522db9c5..cd751da0 100644 --- a/tools/repo_rpmmd.c +++ b/tools/repo_rpmmd.c @@ -231,6 +231,7 @@ struct parsedata { int acontent; int docontent; Solvable *solvable; + Offset freshens; struct stateswitch *swtab[NUMSTATES]; enum state sbtab[NUMSTATES]; const char *lang; @@ -578,6 +579,7 @@ startElement(void *userData, const char *name, const char **atts) pd->kind = "patch"; pd->solvable = pool_id2solvable(pool, repo_add_solvable(pd->common.repo)); + pd->freshens = 0; repodata_extend(pd->data, pd->solvable - pool->solvables); pd->handle = repodata_get_handle(pd->data, (pd->solvable - pool->solvables) - pd->data->start); #if 0 @@ -645,10 +647,10 @@ startElement(void *userData, const char *name, const char **atts) break; case STATE_CAPS_FRESHENS: case STATE_FRESHENS: - s->freshens = 0; + pd->freshens = 0; break; case STATE_FRESHENSENTRY: - s->freshens = adddep(pool, pd, s->freshens, atts, 0); + pd->freshens = adddep(pool, pd, pd->freshens, atts, 0); break; case STATE_CAP_PROVIDES: case STATE_CAP_REQUIRES: @@ -761,7 +763,8 @@ endElement(void *userData, const char *name) s->evr = ID_EMPTY; /* some patterns have this */ if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) s->provides = repo_addid_dep(repo, s->provides, rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); - s->supplements = repo_fix_legacy(repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(repo, s->provides, s->supplements, pd->freshens); + pd->freshens = 0; pd->kind = 0; break; case STATE_NAME: @@ -827,7 +830,7 @@ endElement(void *userData, const char *name) s->enhances = adddepplain(pool, &pd->common, s->enhances, pd->content, 0, pd->capkind); break; case STATE_CAP_FRESHENS: - s->freshens = adddepplain(pool, &pd->common, s->freshens, pd->content, 0, pd->capkind); + pd->freshens = adddepplain(pool, &pd->common, pd->freshens, pd->content, 0, pd->capkind); break; case STATE_SUMMARY: pd->lang = 0; diff --git a/tools/repo_susetags.c b/tools/repo_susetags.c index 55536472..edbbcc55 100644 --- a/tools/repo_susetags.c +++ b/tools/repo_susetags.c @@ -379,7 +379,7 @@ tag_from_string (char *cs) */ static void -finish_solvable(struct parsedata *pd, Solvable *s, int handle) +finish_solvable(struct parsedata *pd, Solvable *s, int handle, Offset freshens) { Pool *pool = pd->repo->pool; @@ -449,7 +449,7 @@ finish_solvable(struct parsedata *pd, Solvable *s, int handle) rel2id(pool, s->name, s->evr, REL_EQ, 1), 0); /* XXX This uses repo_addid_dep internally, so should also be harmless to do twice. */ - s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements); + s->supplements = repo_fix_legacy(pd->repo, s->provides, s->supplements, freshens); if (pd->ndirs) commit_diskusage (pd, handle); } @@ -461,6 +461,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla char *line, *linep; int aline; Solvable *s; + Offset freshens; int intag = 0; int cummulate = 0; int indesc = 0; @@ -489,6 +490,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla linep = line; s = 0; + freshens = 0; /* XXX deactivate test code */ blanr = 0; @@ -624,7 +626,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla /* If we have an old solvable, complete it by filling in some default stuff. */ if (s) - finish_solvable(&pd, s, handle); + finish_solvable(&pd, s, handle, freshens); /* * define kind @@ -652,6 +654,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla evr = makeevr(pool, join2(sp[1], "-", sp[2])); s = 0; + freshens = 0; /* Now see if we know this solvable already. If we found neither the name nor the arch at all in this repo @@ -752,7 +755,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla s->suggests = adddep(pool, &pd, s->suggests, line, 0, pd.kind); continue; case CTAG('=', 'F', 'r', 'e'): /* freshens */ - s->freshens = adddep(pool, &pd, s->freshens, line, 0, pd.kind); + freshens = adddep(pool, &pd, freshens, line, 0, pd.kind); continue; case CTAG('=', 'P', 'r', 'c'): /* packages recommended */ if (flags & SUSETAGS_KINDS_SEPARATELY) @@ -782,7 +785,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla if (flags & SUSETAGS_KINDS_SEPARATELY) fprintf (stderr, "Unsupported: pattern -> package freshens\n"); else - s->freshens = adddep(pool, &pd, s->freshens, line, 0, 0); + freshens = adddep(pool, &pd, freshens, line, 0, 0); continue; case CTAG('=', 'P', 's', 'p'): /* pattern: package supplements */ if (flags & SUSETAGS_KINDS_SEPARATELY) @@ -952,7 +955,7 @@ repo_add_susetags(Repo *repo, FILE *fp, Id vendor, const char *language, int fla } /* for(;;) */ if (s) - finish_solvable(&pd, s, handle); + finish_solvable(&pd, s, handle, freshens); /* Shared attributes * (e.g. multiple binaries built from same source) diff --git a/tools/repo_write.c b/tools/repo_write.c index 76c04ae2..73db5488 100644 --- a/tools/repo_write.c +++ b/tools/repo_write.c @@ -1267,11 +1267,6 @@ for (i = 1; i < cbdata.nmykeys; i++) *sp++ = SOLVABLE_ENHANCES; cbdata.mykeys[SOLVABLE_ENHANCES].size += incneedidarray(pool, idarraydata + s->enhances, needid); } - if (s->freshens && cbdata.keymap[SOLVABLE_FRESHENS]) - { - *sp++ = SOLVABLE_FRESHENS; - cbdata.mykeys[SOLVABLE_FRESHENS].size += incneedidarray(pool, idarraydata + s->freshens, needid); - } if (repo->rpmdbid && cbdata.keymap[RPM_RPMDBID]) { *sp++ = RPM_RPMDBID; @@ -1533,8 +1528,6 @@ fprintf(stderr, "dir %d used %d\n", i, cbdata.dirused ? cbdata.dirused[i] : 1); data_addidarray_sort(xd, pool, needid, idarraydata + s->supplements, 0); if (s->enhances && cbdata.keymap[SOLVABLE_ENHANCES]) data_addidarray_sort(xd, pool, needid, idarraydata + s->enhances, 0); - if (s->freshens && cbdata.keymap[SOLVABLE_FRESHENS]) - data_addidarray_sort(xd, pool, needid, idarraydata + s->freshens, 0); if (repo->rpmdbid && cbdata.keymap[RPM_RPMDBID]) data_addu32(xd, repo->rpmdbid[i - repo->start]); if (anyrepodataused)