From 1e554802e7188a10cc9040d5067d7ebf6b3fe0f3 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Tue, 15 Jan 2013 13:59:31 +0100 Subject: [PATCH] do not ignore disabled/considered flags for src packages --- src/pool.c | 2 ++ src/repo.h | 13 +++++++++++++ src/rules.c | 14 ++++++++------ src/selection.c | 24 +++++++++++++++++++----- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/pool.c b/src/pool.c index d8eb040..67f9d48 100644 --- a/src/pool.c +++ b/src/pool.c @@ -758,6 +758,8 @@ pool_addrelproviders(Pool *pool, Id d) continue; if (s->arch != evr && s->arch != ARCH_NOSRC) continue; + if (pool_disabled_solvable(pool, s)) + continue; if (pool_match_nevr(pool, s, name)) queue_push(&plist, p); } diff --git a/src/repo.h b/src/repo.h index 4f93d1e..a7a56ae 100644 --- a/src/repo.h +++ b/src/repo.h @@ -84,6 +84,19 @@ static inline Repo *pool_id2repo(Pool *pool, Id repoid) return repoid < pool->nrepos ? pool->repos[repoid] : 0; } +static inline int pool_disabled_solvable(const Pool *pool, Solvable *s) +{ + if (s->repo && s->repo->disabled) + return 1; + if (pool->considered) + { + Id id = s - pool->solvables; + if (!MAPTST(pool->considered, id)) + return 1; + } + return 0; +} + static inline int pool_installable(const Pool *pool, Solvable *s) { if (!s->arch || s->arch == ARCH_SRC || s->arch == ARCH_NOSRC) diff --git a/src/rules.c b/src/rules.c index f6facf4..729268d 100644 --- a/src/rules.c +++ b/src/rules.c @@ -507,13 +507,15 @@ solver_addrpmrulesforsolvable(Solver *solv, Solvable *s, Map *m) dontfix = 1; /* dont care about broken rpm deps */ } - if (!dontfix - && s->arch != ARCH_SRC - && s->arch != ARCH_NOSRC - && !pool_installable(pool, s)) + if (!dontfix) { - POOL_DEBUG(SOLV_DEBUG_RULE_CREATION, "package %s [%d] is not installable\n", pool_solvable2str(pool, s), (Id)(s - pool->solvables)); - addrpmrule(solv, -n, 0, SOLVER_RULE_RPM_NOT_INSTALLABLE, 0); + if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC + ? pool_disabled_solvable(pool, s) + : !pool_installable(pool, s)) + { + POOL_DEBUG(SOLV_DEBUG_RULE_CREATION, "package %s [%d] is not installable\n", pool_solvable2str(pool, s), (Id)(s - pool->solvables)); + addrpmrule(solv, -n, 0, SOLVER_RULE_RPM_NOT_INSTALLABLE, 0); + } } /* yet another SUSE hack, sigh */ diff --git a/src/selection.c b/src/selection.c index 2ef5e1e..8d05448 100644 --- a/src/selection.c +++ b/src/selection.c @@ -245,7 +245,11 @@ selection_addsrc(Pool *pool, Queue *selection, int flags) if (s->name != name) continue; if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC) - havesrc = 1; + { + if (pool_disabled_solvable(pool, s)) + continue; + havesrc = 1; + } else if (s->repo != pool->installed && !pool_installable(pool, s)) continue; queue_push(&q, p); @@ -316,6 +320,8 @@ selection_depglob(Pool *pool, Queue *selection, const char *name, int flags) { if ((flags & SELECTION_INSTALLED_ONLY) != 0 && s->repo != pool->installed) continue; /* just in case... src rpms can't be installed */ + if (pool_disabled_solvable(pool, s)) + continue; if ((flags & SELECTION_SOURCE_ONLY) != 0) id = pool_rel2id(pool, id, ARCH_SRC, REL_ARCH, 1); queue_push2(selection, SOLVER_SOLVABLE_NAME, id); @@ -377,8 +383,12 @@ selection_depglob(Pool *pool, Queue *selection, const char *name, int flags) { Solvable *s = pool->solvables + p; if (s->repo != pool->installed && !pool_installable(pool, s)) - if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)) - continue; + { + if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)) + continue; + if (pool_disabled_solvable(pool, s)) + continue; + } if ((flags & SELECTION_INSTALLED_ONLY) != 0 && s->repo != pool->installed) continue; id = s->name; @@ -476,8 +486,12 @@ selection_filelist(Pool *pool, Queue *selection, const char *name, int flags) if (!s->repo) continue; if (s->repo != pool->installed && !pool_installable(pool, s)) - if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)) - continue; + { + if (!(flags & SELECTION_SOURCE_ONLY) || (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC)) + continue; + if (pool_disabled_solvable(pool, s)) + continue; + } if ((flags & SELECTION_INSTALLED_ONLY) != 0 && s->repo != pool->installed) continue; queue_push(&q, di.solvid); -- 2.7.4