From 1fe6dc5d83d94adb96658ad86ac2a27011711c72 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Thu, 17 Oct 2013 17:19:16 +0200 Subject: [PATCH] simplify packagelink code a bit --- src/knownid.h | 8 ++++---- src/rules.c | 45 +++++++++++++++++---------------------------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/src/knownid.h b/src/knownid.h index a153915..ba4d71b 100644 --- a/src/knownid.h +++ b/src/knownid.h @@ -174,10 +174,10 @@ KNOWNID(PRODUCT_REFERENCEFILE, "product:referencefile"), /* installed product o KNOWNID(PRODUCT_SHORTLABEL, "product:shortlabel"), /* not in repomd? */ KNOWNID(PRODUCT_DISTPRODUCT, "product:distproduct"), /* obsolete */ KNOWNID(PRODUCT_DISTVERSION, "product:distversion"), /* obsolete */ -KNOWNID(PRODUCT_TYPE, "product:type"), /* not in repomd? */ +KNOWNID(PRODUCT_TYPE, "product:type"), /* e.g. 'base' */ KNOWNID(PRODUCT_URL, "product:url"), KNOWNID(PRODUCT_URL_TYPE, "product:url:type"), -KNOWNID(PRODUCT_FLAGS, "product:flags"), /* code10 repo flags? obsolete? */ +KNOWNID(PRODUCT_FLAGS, "product:flags"), /* e.g. 'update', 'no_you' */ KNOWNID(PRODUCT_PRODUCTLINE, "product:productline"), /* installed product only */ KNOWNID(PRODUCT_REGISTER_TARGET, "product:regtarget"), /* installed product only */ KNOWNID(PRODUCT_REGISTER_RELEASE, "product:regrelease"), /* installed product only */ @@ -210,7 +210,7 @@ KNOWNID(REPOSITORY_UPDATES, "repository:updates"), KNOWNID(REPOSITORY_DISTROS, "repository:distros"), KNOWNID(REPOSITORY_PRODUCT_LABEL, "repository:product:label"), KNOWNID(REPOSITORY_PRODUCT_CPEID, "repository:product:cpeid"), -KNOWNID(REPOSITORY_REPOID, "repository:repoid"), /* obsolete? */ +KNOWNID(REPOSITORY_REPOID, "repository:repoid"), /* obsolete? */ /* keyword (tags) for this repository */ KNOWNID(REPOSITORY_KEYWORDS, "repository:keywords"), @@ -233,7 +233,7 @@ KNOWNID(DELTA_SEQ_EVR, "delta:seqevr"), KNOWNID(DELTA_SEQ_NUM, "delta:seqnum"), /* XXX: shouldn't use a real ID */ -KNOWNID(NAMESPACE_PRODUCTBUDDY, "namespace:productbuddy"), +KNOWNID(NAMESPACE_PRODUCTBUDDY, "namespace:productbuddy"), /* obsolete */ KNOWNID(REPOSITORY_REPOMD, "repository:repomd"), KNOWNID(REPOSITORY_REPOMD_TYPE, "repository:repomd:type"), diff --git a/src/rules.c b/src/rules.c index a3f80b3..6f9c170 100644 --- a/src/rules.c +++ b/src/rules.c @@ -445,18 +445,6 @@ addlinks(Solver *solv, Solvable *s, Id req, Queue *qr, Id prv, Queue *qp, Map *m int i; if (!qr->count) return; - - if (m && !MAPTST(m, s - pool->solvables)) - { - /* called from solver_addrpmrulesforlinked */ - for (i = 0; i < qr->count; i++) - if (MAPTST(m, qr->elements[i])) - break; - if (i == qr->count) - return; - queue_push(workq, s - pool->solvables); - return; - } #if 0 printf("ADDLINKS %s\n -> %s\n", pool_solvable2str(pool, s), pool_dep2str(pool, req)); for (i = 0; i < qr->count; i++) @@ -482,12 +470,12 @@ addlinks(Solver *solv, Solvable *s, Id req, Queue *qr, Id prv, Queue *qp, Map *m addrpmrule(solv, qp->elements[0], -qr->elements[i], SOLVER_RULE_RPM_PACKAGE_REQUIRES, prv); } if (!m) - return; + return; /* nothing more to do if called from getrpmruleinfos() */ for (i = 0; i < qr->count; i++) - if (m && !MAPTST(m, qr->elements[i])) + if (!MAPTST(m, qr->elements[i])) queue_push(workq, qr->elements[i]); for (i = 0; i < qp->count; i++) - if (m && !MAPTST(m, qp->elements[i])) + if (!MAPTST(m, qp->elements[i])) queue_push(workq, qp->elements[i]); if (solv->installed && s->repo == solv->installed) { @@ -846,11 +834,10 @@ solver_addrpmrulesforlinked(Solver *solv, Map *m) { Pool *pool = solv->pool; Solvable *s; - const char *name; - int i; - Queue workq; + int i, j; + Queue qr; - queue_init(&workq); + queue_init(&qr); for (i = 1; i < pool->nsolvables; i++) { if (MAPTST(m, i)) @@ -858,21 +845,23 @@ solver_addrpmrulesforlinked(Solver *solv, Map *m) s = pool->solvables + i; if (!s->repo || s->repo == solv->installed) continue; - name = pool_id2str(pool, s->name); - if (!strchr(name, ':')) + if (!strchr(pool_id2str(pool, s->name), ':')) continue; if (!pool_installable(pool, s)) continue; - add_package_link(solv, s, m, &workq); - if (workq.count) + find_package_link(pool, s, 0, &qr, 0, 0); + if (qr.count) { - int j; - for (j = 0; j < workq.count; j++) - solver_addrpmrulesforsolvable(solv, pool->solvables + workq.elements[j], m); - queue_empty(&workq); + for (j = 0; j < qr.count; j++) + if (MAPTST(m, qr.elements[j])) + { + solver_addrpmrulesforsolvable(solv, s, m); + break; + } + queue_empty(&qr); } } - queue_free(&workq); + queue_free(&qr); } #endif -- 2.7.4