{
/* installed, check for recommends */
Id *recp, rec, pp, p;
- if (solv->only_namespace_recommended)
- continue;
if (!solv->addalreadyrecommended && s->repo == solv->installed)
continue;
if (s->recommends)
recp = s->repo->idarraydata + s->recommends;
while ((rec = *recp++) != 0)
{
+ /* cheat: we just look if there is REL_NAMESPACE in the dep */
+ if (solv->only_namespace_recommended && !solver_is_namespace_dep(solv, rec))
+ continue;
#ifdef ENABLE_COMPLEX_DEPS
if (pool_is_complex_dep(pool, rec))
{
extern int solver_dep_fulfilled_cplx(Solver *solv, Reldep *rd);
extern int solver_is_supplementing_alreadyinstalled(Solver *solv, Solvable *s);
extern void solver_intersect_obsoleted(Solver *solv, Id p, Queue *q, int qstart, Map *m);
+extern int solver_is_namespace_dep_slow(Solver *solv, Reldep *rd);
extern void solver_createcleandepsmap(Solver *solv, Map *cleandepsmap, int unneeded);
extern int solver_check_cleandeps_mistakes(Solver *solv);
return 0;
}
+static inline int
+solver_is_namespace_dep(Solver *solv, Id dep)
+{
+ Pool *pool = solv->pool;
+ Reldep *rd;
+ if (!ISRELDEP(dep))
+ return 0;
+ rd = GETRELDEP(pool, dep);
+ if (rd->flags == REL_NAMESPACE)
+ return 1;
+ if (ISRELDEP(rd->name))
+ return solver_is_namespace_dep_slow(solv, rd);
+ if (ISRELDEP(rd->evr))
+ return solver_is_namespace_dep_slow(solv, GETRELDEP(pool, rd->evr));
+ return 0;
+}
+
#endif /* LIBSOLV_SOLVER_PRIVATE_H */
}
return 0;
}
+
+int
+solver_is_namespace_dep_slow(Solver *solv, Reldep *rd)
+{
+ Pool *pool = solv->pool;
+ for (;;)
+ {
+ if (rd->flags == REL_NAMESPACE)
+ return 1;
+ if (ISRELDEP(rd->name) && solver_is_namespace_dep_slow(solv, GETRELDEP(pool, rd->name)))
+ return 1;
+ if (!ISRELDEP(rd->evr))
+ return 0;
+ rd = GETRELDEP(pool, rd->evr);
+ }
+}
+
/*
* add all installed packages that package p obsoletes to Queue q.
* Package p is not installed. Also, we know that if