1
0
mirror of https://github.com/openSUSE/libsolv.git synced 2026-02-05 12:45:46 +01:00

Move pool_dep_fulfilled_in_map into pooldep.c

This commit is contained in:
Michael Schroeder
2025-07-30 12:40:59 +02:00
parent 1f157d5abb
commit 276d550835
2 changed files with 69 additions and 70 deletions

View File

@@ -754,74 +754,4 @@ int (*pool_get_custom_vendorcheck(Pool *pool))(Pool *, Solvable *, Solvable *)
return pool->custom_vendorcheck;
}
static int
pool_dep_fulfilled_in_map_cplx(Pool *pool, const Map *map, Reldep *rd)
{
if (rd->flags == REL_COND)
{
if (ISRELDEP(rd->evr))
{
Reldep *rd2 = GETRELDEP(pool, rd->evr);
if (rd2->flags == REL_ELSE)
{
if (pool_dep_fulfilled_in_map(pool, map, rd2->name))
return pool_dep_fulfilled_in_map(pool, map, rd->name);
return pool_dep_fulfilled_in_map(pool, map, rd2->evr);
}
}
if (pool_dep_fulfilled_in_map(pool, map, rd->name))
return 1;
return !pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
if (rd->flags == REL_UNLESS)
{
if (ISRELDEP(rd->evr))
{
Reldep *rd2 = GETRELDEP(pool, rd->evr);
if (rd2->flags == REL_ELSE)
{
if (!pool_dep_fulfilled_in_map(pool, map, rd2->name))
return pool_dep_fulfilled_in_map(pool, map, rd->name);
return pool_dep_fulfilled_in_map(pool, map, rd2->evr);
}
}
if (!pool_dep_fulfilled_in_map(pool, map, rd->name))
return 0;
return !pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
if (rd->flags == REL_AND)
{
if (!pool_dep_fulfilled_in_map(pool, map, rd->name))
return 0;
return pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
if (rd->flags == REL_OR)
{
if (pool_dep_fulfilled_in_map(pool, map, rd->name))
return 1;
return pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
return 0;
}
int pool_dep_fulfilled_in_map(Pool *pool, const Map *map, Id dep)
{
Id p, pp;
if (ISRELDEP(dep)) {
Reldep *rd = GETRELDEP(pool, dep);
if (rd->flags == REL_COND || rd->flags == REL_UNLESS ||
rd->flags == REL_AND || rd->flags == REL_OR)
return pool_dep_fulfilled_in_map_cplx(pool, map, rd);
if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_SPLITPROVIDES)
return 0;
}
FOR_PROVIDES(p, pp, dep) {
if (MAPTST(map, p))
return 1;
}
return 0;
}
/* EOF */

View File

@@ -345,4 +345,73 @@ pool_whatmatchessolvable(Pool *pool, Id keyname, Id solvid, Queue *q, int marker
queue_free(&qq);
}
static int
pool_dep_fulfilled_in_map_cplx(Pool *pool, const Map *map, Reldep *rd)
{
if (rd->flags == REL_COND)
{
if (ISRELDEP(rd->evr))
{
Reldep *rd2 = GETRELDEP(pool, rd->evr);
if (rd2->flags == REL_ELSE)
{
if (pool_dep_fulfilled_in_map(pool, map, rd2->name))
return pool_dep_fulfilled_in_map(pool, map, rd->name);
return pool_dep_fulfilled_in_map(pool, map, rd2->evr);
}
}
if (pool_dep_fulfilled_in_map(pool, map, rd->name))
return 1;
return !pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
if (rd->flags == REL_UNLESS)
{
if (ISRELDEP(rd->evr))
{
Reldep *rd2 = GETRELDEP(pool, rd->evr);
if (rd2->flags == REL_ELSE)
{
if (!pool_dep_fulfilled_in_map(pool, map, rd2->name))
return pool_dep_fulfilled_in_map(pool, map, rd->name);
return pool_dep_fulfilled_in_map(pool, map, rd2->evr);
}
}
if (!pool_dep_fulfilled_in_map(pool, map, rd->name))
return 0;
return !pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
if (rd->flags == REL_AND)
{
if (!pool_dep_fulfilled_in_map(pool, map, rd->name))
return 0;
return pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
if (rd->flags == REL_OR)
{
if (pool_dep_fulfilled_in_map(pool, map, rd->name))
return 1;
return pool_dep_fulfilled_in_map(pool, map, rd->evr);
}
return 0;
}
int
pool_dep_fulfilled_in_map(Pool *pool, const Map *map, Id dep)
{
Id p, pp;
if (ISRELDEP(dep)) {
Reldep *rd = GETRELDEP(pool, dep);
if (rd->flags == REL_COND || rd->flags == REL_UNLESS ||
rd->flags == REL_AND || rd->flags == REL_OR)
return pool_dep_fulfilled_in_map_cplx(pool, map, rd);
if (rd->flags == REL_NAMESPACE && rd->name == NAMESPACE_SPLITPROVIDES)
return 0;
}
FOR_PROVIDES(p, pp, dep) {
if (MAPTST(map, p))
return 1;
}
return 0;
}
/* EOF */