- MAPSET(&solv->dupinvolvedmap, p);
- if (targeted)
- MAPSET(&solv->dupmap, p);
- FOR_PROVIDES(pi, pip, s->name)
- {
- ps = pool->solvables + pi;
- if (ps->name != s->name)
- continue;
- MAPSET(&solv->dupinvolvedmap, pi);
- if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0)
- {
- if (!solv->bestupdatemap.size)
- map_grow(&solv->bestupdatemap, installed->end - installed->start);
- MAPSET(&solv->bestupdatemap, pi - installed->start);
- }
- if (!targeted && ps->repo != installed)
- MAPSET(&solv->dupmap, pi);
- }
- if (s->repo == installed && solv->obsoletes && solv->obsoletes[p - installed->start])
- {
- Id *opp;
- for (opp = solv->obsoletes_data + solv->obsoletes[p - installed->start]; (pi = *opp++) != 0;)
- {
- ps = pool->solvables + pi;
- if (ps->repo == installed)
- continue;
- MAPSET(&solv->dupinvolvedmap, pi);
- if (!targeted)
- MAPSET(&solv->dupmap, pi);
- }
- }
- if (targeted && s->obsoletes)
- {
- /* XXX: check obsoletes/provides combination */
- obsp = s->repo->idarraydata + s->obsoletes;
- while ((obs = *obsp++) != 0)
- {
- FOR_PROVIDES(pi, pp, obs)
- {
- Solvable *ps = pool->solvables + pi;
- if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, ps, obs))
- continue;
- if (pool->obsoleteusescolors && !pool_colormatch(pool, s, ps))
- continue;
- MAPSET(&solv->dupinvolvedmap, pi);
- if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0)
- {
- if (!solv->bestupdatemap.size)
- map_grow(&solv->bestupdatemap, installed->end - installed->start);
- MAPSET(&solv->bestupdatemap, pi - installed->start);
- }
- }
- }
- }
- }
- break;
- }
- if (what <= 0 || what > pool->nrepos)
- break;
- repo = pool_id2repo(pool, what);
- if (!repo)
- break;
- if (repo != installed && !(how & SOLVER_TARGETED) && solv->noautotarget)
- break;
- targeted = repo != installed || (how & SOLVER_TARGETED) != 0;
- FOR_REPO_SOLVABLES(repo, p, s)
- {
- if (repo != installed && !pool_installable(pool, s))
- continue;
- MAPSET(&solv->dupinvolvedmap, p);
- if (targeted)
- MAPSET(&solv->dupmap, p);
- FOR_PROVIDES(pi, pip, s->name)
- {
- ps = pool->solvables + pi;
- if (ps->name != s->name)
- continue;
- MAPSET(&solv->dupinvolvedmap, pi);
- if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0)
- {
- if (!solv->bestupdatemap.size)
- map_grow(&solv->bestupdatemap, installed->end - installed->start);
- MAPSET(&solv->bestupdatemap, pi - installed->start);
- }
- if (!targeted && ps->repo != installed)
- MAPSET(&solv->dupmap, pi);
- }
- if (s->repo == installed && solv->obsoletes && solv->obsoletes[p - installed->start])
- {
- Id *opp;
- for (opp = solv->obsoletes_data + solv->obsoletes[p - installed->start]; (pi = *opp++) != 0;)
- {
- ps = pool->solvables + pi;
- if (ps->repo == installed)
- continue;
- MAPSET(&solv->dupinvolvedmap, pi);
- if (!targeted)
- MAPSET(&solv->dupmap, pi);
- }
- }
- if (targeted && s->obsoletes)
- {
- /* XXX: check obsoletes/provides combination */
- obsp = s->repo->idarraydata + s->obsoletes;
- while ((obs = *obsp++) != 0)
- {
- FOR_PROVIDES(pi, pp, obs)
- {
- Solvable *ps = pool->solvables + pi;
- if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, ps, obs))
- continue;
- if (pool->obsoleteusescolors && !pool_colormatch(pool, s, ps))
- continue;
- MAPSET(&solv->dupinvolvedmap, pi);
- if (ps->repo == installed && (how & SOLVER_FORCEBEST) != 0)
- {
- if (!solv->bestupdatemap.size)
- map_grow(&solv->bestupdatemap, installed->end - installed->start);
- MAPSET(&solv->bestupdatemap, pi - installed->start);
- }
- }
- }