Author: mlschroe Date: Wed May 21 14:42:38 2008 New Revision: 10174 URL: http://svn.opensuse.org/viewcvs/zypp?rev=10174&view=rev Log: - allow <pkg>.src matching, could be used in zypper to make the solver select a src package Modified: trunk/sat-solver/src/pool.c Modified: trunk/sat-solver/src/pool.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/pool.c?rev=10174&r1=10173&r2=10174&view=diff ============================================================================== --- trunk/sat-solver/src/pool.c (original) +++ trunk/sat-solver/src/pool.c Wed May 21 14:42:38 2008 @@ -516,6 +516,22 @@ } break; case REL_ARCH: + /* small hack: make it possible to match <pkg>.src + * we have to iterate over the solvables as src packages do not + * provide anything, thus they are not indexed in our + * whatprovides hash */ + if (evr == ARCH_SRC) + { + Solvable *s; + for (p = 1, s = pool->solvables + p; p < pool->nsolvables; p++, s++) + { + if (s->arch != ARCH_SRC && s->arch != ARCH_NOSRC) + continue; + if (pool_match_nevr(pool, s, name)) + queue_push(&plist, p); + } + break; + } pp = pp2 = pool_whatprovides(pool, name); while ((p = *pp++) != 0) { @@ -546,11 +562,19 @@ } while ((p = *pp++) != 0) { + Solvable *s = pool->solvables + p; #if 0 - POOL_DEBUG(DEBUG_1, "addrelproviders: checking package %s\n", id2str(pool, pool->p[p].name)); + POOL_DEBUG(DEBUG_1, "addrelproviders: checking package %s\n", id2str(pool, s->name)); #endif + if (!s->provides) + { + /* no provides - check nevr */ + if (pool_match_nevr_rel(pool, s, MAKERELDEP(d))) + queue_push(&plist, p); + continue; + } /* solvable p provides name in some rels */ - pidp = pool->solvables[p].repo->idarraydata + pool->solvables[p].provides; + pidp = s->repo->idarraydata + s->provides; while ((pid = *pidp++) != 0) { int pflags; -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org