|
Packit Service |
ff689b |
/*
|
|
Packit Service |
ff689b |
* Copyright (c) 2017, SUSE LLC.
|
|
Packit Service |
ff689b |
*
|
|
Packit Service |
ff689b |
* This program is licensed under the BSD license, read LICENSE.BSD
|
|
Packit Service |
ff689b |
* for further information
|
|
Packit Service |
ff689b |
*/
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
/* Functions that help getting/setting userinstalled packages. */
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
#include <stdio.h>
|
|
Packit Service |
ff689b |
#include <stdlib.h>
|
|
Packit Service |
ff689b |
#include <unistd.h>
|
|
Packit Service |
ff689b |
#include <string.h>
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
#include "solver.h"
|
|
Packit Service |
ff689b |
#include "solver_private.h"
|
|
Packit Service |
ff689b |
#include "bitmap.h"
|
|
Packit Service |
ff689b |
#include "pool.h"
|
|
Packit Service |
ff689b |
#include "util.h"
|
|
Packit Service |
ff689b |
#include "poolarch.h"
|
|
Packit Service |
ff689b |
#include "linkedpkg.h"
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
static int
|
|
Packit Service |
ff689b |
get_userinstalled_cmp(const void *ap, const void *bp, void *dp)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
return *(Id *)ap - *(Id *)bp;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
static int
|
|
Packit Service |
ff689b |
get_userinstalled_cmp_names(const void *ap, const void *bp, void *dp)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Pool *pool = dp;
|
|
Packit Service |
ff689b |
return strcmp(pool_id2str(pool, *(Id *)ap), pool_id2str(pool, *(Id *)bp));
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
static int
|
|
Packit Service |
ff689b |
get_userinstalled_cmp_namearch(const void *ap, const void *bp, void *dp)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Pool *pool = dp;
|
|
Packit Service |
ff689b |
int r;
|
|
Packit Service |
ff689b |
r = strcmp(pool_id2str(pool, ((Id *)ap)[0]), pool_id2str(pool, ((Id *)bp)[0]));
|
|
Packit Service |
ff689b |
if (r)
|
|
Packit Service |
ff689b |
return r;
|
|
Packit Service |
ff689b |
return strcmp(pool_id2str(pool, ((Id *)ap)[1]), pool_id2str(pool, ((Id *)bp)[1]));
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
static void
|
|
Packit Service |
ff689b |
get_userinstalled_sort_uniq(Pool *pool, Queue *q, int flags)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Id lastp = -1, lasta = -1;
|
|
Packit Service |
ff689b |
int i, j;
|
|
Packit Service |
ff689b |
if (q->count < ((flags & GET_USERINSTALLED_NAMEARCH) ? 4 : 2))
|
|
Packit Service |
ff689b |
return;
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
solv_sort(q->elements, q->count / 2, 2 * sizeof(Id), get_userinstalled_cmp_namearch, pool);
|
|
Packit Service |
ff689b |
else if ((flags & GET_USERINSTALLED_NAMES) != 0)
|
|
Packit Service |
ff689b |
solv_sort(q->elements, q->count, sizeof(Id), get_userinstalled_cmp_names, pool);
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
solv_sort(q->elements, q->count, sizeof(Id), get_userinstalled_cmp, 0);
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = j = 0; i < q->count; i += 2)
|
|
Packit Service |
ff689b |
if (q->elements[i] != lastp || q->elements[i + 1] != lasta)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
q->elements[j++] = lastp = q->elements[i];
|
|
Packit Service |
ff689b |
q->elements[j++] = lasta = q->elements[i + 1];
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = j = 0; i < q->count; i++)
|
|
Packit Service |
ff689b |
if (q->elements[i] != lastp)
|
|
Packit Service |
ff689b |
q->elements[j++] = lastp = q->elements[i];
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
queue_truncate(q, j);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
static void
|
|
Packit Service |
ff689b |
namearch2solvables(Pool *pool, Queue *q, Queue *qout, int job)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
int i;
|
|
Packit Service |
ff689b |
if (!pool->installed)
|
|
Packit Service |
ff689b |
return;
|
|
Packit Service |
ff689b |
for (i = 0; i < q->count; i += 2)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Id p, pp, name = q->elements[i], arch = q->elements[i + 1];
|
|
Packit Service |
ff689b |
FOR_PROVIDES(p, pp, name)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Solvable *s = pool->solvables + p;
|
|
Packit Service |
ff689b |
if (s->repo != pool->installed || s->name != name || (arch && s->arch != arch))
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if (job)
|
|
Packit Service |
ff689b |
queue_push(qout, job);
|
|
Packit Service |
ff689b |
queue_push(qout, p);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
void
|
|
Packit Service |
ff689b |
solver_get_userinstalled(Solver *solv, Queue *q, int flags)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Pool *pool = solv->pool;
|
|
Packit Service |
ff689b |
Id p, p2, pp;
|
|
Packit Service |
ff689b |
Solvable *s;
|
|
Packit Service |
ff689b |
Repo *installed = solv->installed;
|
|
Packit Service |
ff689b |
int i, j;
|
|
Packit Service |
ff689b |
Map userinstalled;
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
map_init(&userinstalled, 0);
|
|
Packit Service |
ff689b |
queue_empty(q);
|
|
Packit Service |
ff689b |
/* first process jobs */
|
|
Packit Service |
ff689b |
for (i = 0; i < solv->job.count; i += 2)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Id how = solv->job.elements[i];
|
|
Packit Service |
ff689b |
Id what, select;
|
|
Packit Service |
ff689b |
if (installed && (how & SOLVER_JOBMASK) == SOLVER_USERINSTALLED)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if (!userinstalled.size)
|
|
Packit Service |
ff689b |
map_grow(&userinstalled, installed->end - installed->start);
|
|
Packit Service |
ff689b |
what = solv->job.elements[i + 1];
|
|
Packit Service |
ff689b |
select = how & SOLVER_SELECTMASK;
|
|
Packit Service |
ff689b |
if (select == SOLVER_SOLVABLE_ALL || (select == SOLVER_SOLVABLE_REPO && what == installed->repoid))
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
FOR_REPO_SOLVABLES(installed, p, s)
|
|
Packit Service |
ff689b |
MAPSET(&userinstalled, p - installed->start);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
FOR_JOB_SELECT(p, pp, select, what)
|
|
Packit Service |
ff689b |
if (pool->solvables[p].repo == installed)
|
|
Packit Service |
ff689b |
MAPSET(&userinstalled, p - installed->start);
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
if ((how & SOLVER_JOBMASK) != SOLVER_INSTALL)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if ((how & SOLVER_NOTBYUSER) != 0)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
what = solv->job.elements[i + 1];
|
|
Packit Service |
ff689b |
select = how & SOLVER_SELECTMASK;
|
|
Packit Service |
ff689b |
FOR_JOB_SELECT(p, pp, select, what)
|
|
Packit Service |
ff689b |
if (solv->decisionmap[p] > 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
queue_push(q, p);
|
|
Packit Service |
ff689b |
#ifdef ENABLE_LINKED_PKGS
|
|
Packit Service |
ff689b |
if (has_package_link(pool, pool->solvables + p))
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
int j;
|
|
Packit Service |
ff689b |
Queue lq;
|
|
Packit Service |
ff689b |
queue_init(&lq;;
|
|
Packit Service |
ff689b |
find_package_link(pool, pool->solvables + p, 0, &lq, 0, 0);
|
|
Packit Service |
ff689b |
for (j = 0; j < lq.count; j++)
|
|
Packit Service |
ff689b |
if (solv->decisionmap[lq.elements[j]] > 0)
|
|
Packit Service |
ff689b |
queue_push(q, lq.elements[j]);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
#endif
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
/* now process updates of userinstalled packages */
|
|
Packit Service |
ff689b |
if (installed && userinstalled.size)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = 1; i < solv->decisionq.count; i++)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
p = solv->decisionq.elements[i];
|
|
Packit Service |
ff689b |
if (p <= 0)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
s = pool->solvables + p;
|
|
Packit Service |
ff689b |
if (!s->repo)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if (s->repo == installed)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if (MAPTST(&userinstalled, p - installed->start))
|
|
Packit Service |
ff689b |
queue_push(q, p);
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
/* new package, check if we replace a userinstalled one */
|
|
Packit Service |
ff689b |
FOR_PROVIDES(p2, pp, s->name)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Solvable *ps = pool->solvables + p2;
|
|
Packit Service |
ff689b |
if (p2 == p || ps->repo != installed || !MAPTST(&userinstalled, p2 - installed->start))
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if (!pool->implicitobsoleteusesprovides && s->name != ps->name)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if (pool->implicitobsoleteusescolors && !pool_colormatch(pool, s, ps))
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
queue_push(q, p);
|
|
Packit Service |
ff689b |
break;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
if (!p2 && s->repo != installed && s->obsoletes)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Id obs, *obsp = s->repo->idarraydata + s->obsoletes;
|
|
Packit Service |
ff689b |
while ((obs = *obsp++) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
FOR_PROVIDES(p2, pp, obs)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Solvable *ps = pool->solvables + p2;
|
|
Packit Service |
ff689b |
if (p2 == p || ps->repo != installed || !MAPTST(&userinstalled, p2 - installed->start))
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if (!pool->obsoleteusesprovides && !pool_match_nevr(pool, ps, obs))
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if (pool->obsoleteusescolors && !pool_colormatch(pool, s, ps))
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
queue_push(q, p);
|
|
Packit Service |
ff689b |
break;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
if (p2)
|
|
Packit Service |
ff689b |
break;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
map_free(&userinstalled);
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
/* convert to desired output format */
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
int qcount = q->count;
|
|
Packit Service |
ff689b |
queue_insertn(q, 0, qcount, 0);
|
|
Packit Service |
ff689b |
for (i = j = 0; i < qcount; i++)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
s = pool->solvables + q->elements[i + qcount];
|
|
Packit Service |
ff689b |
q->elements[j++] = s->name;
|
|
Packit Service |
ff689b |
q->elements[j++] = s->arch;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
else if ((flags & GET_USERINSTALLED_NAMES) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = 0; i < q->count; i++)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
s = pool->solvables + q->elements[i];
|
|
Packit Service |
ff689b |
q->elements[i] = s->name;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
/* sort and unify */
|
|
Packit Service |
ff689b |
get_userinstalled_sort_uniq(pool, q, flags);
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
/* invert if asked for */
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_INVERTED) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
/* first generate queue with all installed packages */
|
|
Packit Service |
ff689b |
Queue invq;
|
|
Packit Service |
ff689b |
queue_init(&invq);
|
|
Packit Service |
ff689b |
for (i = 1; i < solv->decisionq.count; i++)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
p = solv->decisionq.elements[i];
|
|
Packit Service |
ff689b |
if (p <= 0)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
s = pool->solvables + p;
|
|
Packit Service |
ff689b |
if (!s->repo)
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
queue_push2(&invq, s->name, s->arch);
|
|
Packit Service |
ff689b |
else if ((flags & GET_USERINSTALLED_NAMES) != 0)
|
|
Packit Service |
ff689b |
queue_push(&invq, s->name);
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
queue_push(&invq, p);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
/* push q on invq, just in case... */
|
|
Packit Service |
ff689b |
queue_insertn(&invq, invq.count, q->count, q->elements);
|
|
Packit Service |
ff689b |
get_userinstalled_sort_uniq(pool, &invq, flags);
|
|
Packit Service |
ff689b |
/* subtract queues (easy as they are sorted and invq is a superset of q) */
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if (q->count)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = j = 0; i < invq.count; i += 2)
|
|
Packit Service |
ff689b |
if (invq.elements[i] == q->elements[j] && invq.elements[i + 1] == q->elements[j + 1])
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
invq.elements[i] = invq.elements[i + 1] = 0;
|
|
Packit Service |
ff689b |
j += 2;
|
|
Packit Service |
ff689b |
if (j >= q->count)
|
|
Packit Service |
ff689b |
break;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
queue_empty(q);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
for (i = 0; i < invq.count; i += 2)
|
|
Packit Service |
ff689b |
if (invq.elements[i])
|
|
Packit Service |
ff689b |
queue_push2(q, invq.elements[i], invq.elements[i + 1]);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if (q->count)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = j = 0; i < invq.count; i++)
|
|
Packit Service |
ff689b |
if (invq.elements[i] == q->elements[j])
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
invq.elements[i] = 0;
|
|
Packit Service |
ff689b |
if (++j >= q->count)
|
|
Packit Service |
ff689b |
break;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
queue_empty(q);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
for (i = 0; i < invq.count; i++)
|
|
Packit Service |
ff689b |
if (invq.elements[i])
|
|
Packit Service |
ff689b |
queue_push(q, invq.elements[i]);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
queue_free(&invq);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
void
|
|
Packit Service |
ff689b |
pool_add_userinstalled_jobs(Pool *pool, Queue *q, Queue *job, int flags)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
int i;
|
|
Packit Service |
ff689b |
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_INVERTED) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
Queue invq;
|
|
Packit Service |
ff689b |
Id p, lastid;
|
|
Packit Service |
ff689b |
Solvable *s;
|
|
Packit Service |
ff689b |
int bad;
|
|
Packit Service |
ff689b |
if (!pool->installed)
|
|
Packit Service |
ff689b |
return;
|
|
Packit Service |
ff689b |
queue_init(&invq);
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
flags &= ~GET_USERINSTALLED_NAMES; /* just in case */
|
|
Packit Service |
ff689b |
FOR_REPO_SOLVABLES(pool->installed, p, s)
|
|
Packit Service |
ff689b |
queue_push(&invq, flags & GET_USERINSTALLED_NAMES ? s->name : p);
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMEARCH) != 0)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
/* for namearch we convert to packages */
|
|
Packit Service |
ff689b |
namearch2solvables(pool, q, &invq, 0);
|
|
Packit Service |
ff689b |
get_userinstalled_sort_uniq(pool, &invq, flags);
|
|
Packit Service |
ff689b |
namearch2solvables(pool, q, &invq, 0);
|
|
Packit Service |
ff689b |
flags = 0;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
queue_insertn(&invq, invq.count, q->count, q->elements);
|
|
Packit Service |
ff689b |
get_userinstalled_sort_uniq(pool, &invq, flags);
|
|
Packit Service |
ff689b |
/* now the fun part, add q again, sort, and remove all dups */
|
|
Packit Service |
ff689b |
queue_insertn(&invq, invq.count, q->count, q->elements);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
if (invq.count > 1)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if ((flags & GET_USERINSTALLED_NAMES) != 0)
|
|
Packit Service |
ff689b |
solv_sort(invq.elements, invq.count, sizeof(Id), get_userinstalled_cmp_names, pool);
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
solv_sort(invq.elements, invq.count, sizeof(Id), get_userinstalled_cmp, 0);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
lastid = -1;
|
|
Packit Service |
ff689b |
bad = 1;
|
|
Packit Service |
ff689b |
for (i = 0; i < invq.count; i++)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if (invq.elements[i] == lastid)
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
bad = 1;
|
|
Packit Service |
ff689b |
continue;
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
if (!bad)
|
|
Packit Service |
ff689b |
queue_push2(job, SOLVER_USERINSTALLED | (flags & GET_USERINSTALLED_NAMES ? SOLVER_SOLVABLE_NAME : SOLVER_SOLVABLE), lastid);
|
|
Packit Service |
ff689b |
bad = 0;
|
|
Packit Service |
ff689b |
lastid = invq.elements[i];
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
if (!bad)
|
|
Packit Service |
ff689b |
queue_push2(job, SOLVER_USERINSTALLED | (flags & GET_USERINSTALLED_NAMES ? SOLVER_SOLVABLE_NAME : SOLVER_SOLVABLE), lastid);
|
|
Packit Service |
ff689b |
queue_free(&invq);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
if (flags & GET_USERINSTALLED_NAMEARCH)
|
|
Packit Service |
ff689b |
namearch2solvables(pool, q, job, SOLVER_USERINSTALLED | SOLVER_SOLVABLE);
|
|
Packit Service |
ff689b |
else
|
|
Packit Service |
ff689b |
{
|
|
Packit Service |
ff689b |
for (i = 0; i < q->count; i++)
|
|
Packit Service |
ff689b |
queue_push2(job, SOLVER_USERINSTALLED | (flags & GET_USERINSTALLED_NAMES ? SOLVER_SOLVABLE_NAME : SOLVER_SOLVABLE), q->elements[i]);
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
}
|
|
Packit Service |
ff689b |
|