#include "evr.h"
#include "poolarch.h"
#include "repo_solv.h"
+#ifdef ENABLE_SUSEREPO
#include "repo_susetags.h"
+#endif
+#ifdef ENABLE_RPMMD
#include "repo_updateinfoxml.h"
#include "repo_rpmmd.h"
+#endif
#include "solver.h"
#include "solverdebug.h"
-#include "common_myfopen.h"
+#include "solv_xfopen.h"
void
showproblems(Solver *solv, Solvable *s, Queue *cand, Queue *badguys)
queue_init(&rids);
queue_init(&rinfo);
- printf("can't install %s:\n", solvable2str(pool, s));
+ printf("can't install %s:\n", pool_solvable2str(pool, s));
while ((problem = solver_next_problem(solv, problem)) != 0)
{
solver_findallproblemrules(solv, problem, &rids);
dep = rinfo.elements[k + 3];
switch (rinfo.elements[k])
{
- case SOLVER_PROBLEM_DISTUPGRADE_RULE:
+ case SOLVER_RULE_DISTUPGRADE:
break;
- case SOLVER_PROBLEM_INFARCH_RULE:
- printf(" %s has inferior architecture\n", solvid2str(pool, source));
+ case SOLVER_RULE_INFARCH:
+ printf(" %s has inferior architecture\n", pool_solvid2str(pool, source));
break;
- case SOLVER_PROBLEM_UPDATE_RULE:
- printf(" update rule for %s\n", solvid2str(pool, source));
+ case SOLVER_RULE_UPDATE:
+ printf(" update rule for %s\n", pool_solvid2str(pool, source));
if (badguys)
queue_pushunique(badguys, source);
if (!cand)
cand->elements[l] = -source;
}
break;
- case SOLVER_PROBLEM_JOB_RULE:
+ case SOLVER_RULE_JOB:
+ case SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM:
+ case SOLVER_RULE_JOB_UNKNOWN_PACKAGE:
+ case SOLVER_RULE_JOB_UNSUPPORTED:
break;
- case SOLVER_PROBLEM_RPM_RULE:
+ case SOLVER_RULE_RPM:
printf(" some dependency problem\n");
break;
- case SOLVER_PROBLEM_JOB_NOTHING_PROVIDES_DEP:
- printf(" nothing provides requested %s\n", dep2str(pool, dep));
+ case SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP:
+ printf(" nothing provides requested %s\n", pool_dep2str(pool, dep));
break;
- case SOLVER_PROBLEM_NOT_INSTALLABLE:
- printf(" package %s is not installable\n", solvid2str(pool, source));
+ case SOLVER_RULE_RPM_NOT_INSTALLABLE:
+ printf(" package %s is not installable\n", pool_solvid2str(pool, source));
break;
- case SOLVER_PROBLEM_NOTHING_PROVIDES_DEP:
- printf(" nothing provides %s needed by %s\n", dep2str(pool, dep), solvid2str(pool, source));
+ case SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP:
+ printf(" nothing provides %s needed by %s\n", pool_dep2str(pool, dep), pool_solvid2str(pool, source));
if (ISRELDEP(dep))
{
Reldep *rd = GETRELDEP(pool, dep);
{
Id rp, rpp;
FOR_PROVIDES(rp, rpp, rd->name)
- printf(" (we have %s)\n", solvid2str(pool, rp));
+ printf(" (we have %s)\n", pool_solvid2str(pool, rp));
}
}
break;
- case SOLVER_PROBLEM_SAME_NAME:
- printf(" cannot install both %s and %s\n", solvid2str(pool, source), solvid2str(pool, target));
+ case SOLVER_RULE_RPM_SAME_NAME:
+ printf(" cannot install both %s and %s\n", pool_solvid2str(pool, source), pool_solvid2str(pool, target));
break;
- case SOLVER_PROBLEM_PACKAGE_CONFLICT:
- printf(" package %s conflicts with %s provided by %s\n", solvid2str(pool, source), dep2str(pool, dep), solvid2str(pool, target));
+ case SOLVER_RULE_RPM_PACKAGE_CONFLICT:
+ printf(" package %s conflicts with %s provided by %s\n", pool_solvid2str(pool, source), pool_dep2str(pool, dep), pool_solvid2str(pool, target));
break;
- case SOLVER_PROBLEM_PACKAGE_OBSOLETES:
- printf(" package %s obsoletes %s provided by %s\n", solvid2str(pool, source), dep2str(pool, dep), solvid2str(pool, target));
+ case SOLVER_RULE_RPM_PACKAGE_OBSOLETES:
+ printf(" package %s obsoletes %s provided by %s\n", pool_solvid2str(pool, source), pool_dep2str(pool, dep), pool_solvid2str(pool, target));
break;
- case SOLVER_PROBLEM_DEP_PROVIDERS_NOT_INSTALLABLE:
- printf(" package %s requires %s, but none of the providers can be installed\n", solvid2str(pool, source), dep2str(pool, dep));
+ case SOLVER_RULE_RPM_PACKAGE_REQUIRES:
+ printf(" package %s requires %s, but none of the providers can be installed\n", pool_solvid2str(pool, source), pool_dep2str(pool, dep));
break;
- case SOLVER_PROBLEM_SELF_CONFLICT:
- printf(" package %s conflicts with %s provided by itself\n", solvid2str(pool, source), dep2str(pool, dep));
+ case SOLVER_RULE_RPM_SELF_CONFLICT:
+ printf(" package %s conflicts with %s provided by itself\n", pool_solvid2str(pool, source), pool_dep2str(pool, dep));
break;
}
}
toinst(Solver *solv, Repo *repo, Repo *instrepo)
{
Pool *pool = solv->pool;
+ Queue q;
int k;
Id p;
- for (k = 0; k < solv->decisionq.count; k++)
+ queue_init(&q);
+ solver_get_decisionqueue(solv, &q);
+ for (k = 0; k < q.count; k++)
{
- p = solv->decisionq.elements[k];
+ p = q.elements[k];
if (p < 0 || p == SYSTEMSOLVABLE)
continue;
- /* printf(" toinstall %s\n", solvid2str(pool, p));*/
+ /* printf(" toinstall %s\n", pool_solvid2str(pool, p));*/
/* oh my! */
pool->solvables[p].repo = instrepo;
}
+ queue_free(&q);
}
void
printf("instrepo..\n");
FOR_REPO_SOLVABLES(instrepo, p, s)
- printf(" %s\n", solvable2str(pool, s));
+ printf(" %s\n", pool_solvable2str(pool, s));
printf("done.\n");
}
Repo *instrepo;
} context_t;
-#define SHOW_PATCH(c) if (!(c)->shown++) printf("%s:\n", solvable2str(pool, s));
+#define SHOW_PATCH(c) if (!(c)->shown++) printf("%s:\n", pool_solvable2str(pool, s));
#define PERF_DEBUGGING 0
static Pool *pool;
if (!s2->conflicts)
continue;
- if (evrcmp(pool, s->evr, s2->evr, EVRCMP_COMPARE) <= 0)
+ if (pool_evrcmp(pool, s->evr, s2->evr, EVRCMP_COMPARE) <= 0)
continue;
conp2 = s2->repo->idarraydata + s2->conflicts;
while ((con2 = *conp2++) != 0)
if (!con)
{
SHOW_PATCH(c);
- printf(" %s contained %s\n", solvable2str(pool, s2), dep2str(pool, rd2->name));
+ printf(" %s contained %s\n", pool_solvable2str(pool, s2), pool_dep2str(pool, rd2->name));
}
else
{
- if (evrcmp(pool, rd->evr, rd2->evr, EVRCMP_COMPARE) < 0)
+ if (pool_evrcmp(pool, rd->evr, rd2->evr, EVRCMP_COMPARE) < 0)
{
SHOW_PATCH(c);
printf(" %s required newer version %s-%s of %s-%s\n",
- solvable2str(pool, s2), dep2str(pool, rd2->name), dep2str(pool, rd2->evr),
- dep2str(pool, rd->name), dep2str(pool, rd->evr));
+ pool_solvable2str(pool, s2), pool_dep2str(pool, rd2->name), pool_dep2str(pool, rd2->evr),
+ pool_dep2str(pool, rd->name), pool_dep2str(pool, rd->evr));
}
}
queue_init(&job);
- now = sat_timems(0);
+ now = solv_timems(0);
solver_runs = 0;
conp = s->repo->idarraydata + s->conflicts;
/* also set up some minimal system */
queue_push(&job, SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES|SOLVER_WEAK);
- queue_push(&job, str2id(pool, "rpm", 1));
+ queue_push(&job, pool_str2id(pool, "rpm", 1));
queue_push(&job, SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES|SOLVER_WEAK);
- queue_push(&job, str2id(pool, "aaa_base", 1));
+ queue_push(&job, pool_str2id(pool, "aaa_base", 1));
solv = solver_create(pool);
- solv->dontinstallrecommended = 0;
+ /* solver_set_flag(solv, SOLVER_FLAG_IGNORE_RECOMMENDED, 1); */
++solver_runs;
- solver_solve(solv, &job);
- if (solv->problems.count)
+ if (solver_solve(solv, &job))
{
c->status = 1;
printf("error installing original package\n");
queue_push(&job, i);
}
}
- queue_push(&job, SOLVER_INSTALL_SOLVABLE);
+ queue_push(&job, SOLVER_INSTALL|SOLVER_SOLVABLE);
queue_push(&job, pid);
solv = solver_create(pool);
- /*solv->dontinstallrecommended = 1;*/
+ /* solver_set_flag(solv, SOLVER_FLAG_IGNORE_RECOMMENDED, 1); */
++solver_runs;
- solver_solve(solv, &job);
- if (solv->problems.count)
+ if (solver_solve(solv, &job))
{
c->status = 1;
showproblems(solv, s, 0, 0);
}
if (PERF_DEBUGGING)
- printf(" test_all_packages_installable took %d ms in %d runs\n", sat_timems(now), solver_runs);
+ printf(" test_all_packages_installable took %d ms in %d runs\n", solv_timems(now), solver_runs);
}
void
queue_init(&cand);
queue_init(&badguys);
- now = sat_timems(0);
+ now = solv_timems(0);
solver_runs = 0;
/* Test 3: can we upgrade all packages? */
Solvable *s = pool->solvables + p;
if (!s->repo)
continue;
- if (strchr(id2str(pool, s->name), ':'))
+ if (strchr(pool_id2str(pool, s->name), ':'))
continue; /* only packages, please */
if (!pool_installable(pool, s))
continue;
for (i = 0; i < cand.count; i++)
{
p = cand.elements[i];
- if (p > 0 && solv->decisionmap[p] > 0)
+ if (p > 0 && solver_get_decisionlevel(solv, p) > 0)
cand.elements[i] = -p; /* drop candidate */
}
solver_free(solv);
queue_push(&job, i);
}
}
- queue_push(&job, SOLVER_INSTALL_SOLVABLE);
+ queue_push(&job, SOLVER_INSTALL|SOLVER_SOLVABLE);
queue_push(&job, pid);
solv = solver_create(pool);
- solv->dontinstallrecommended = 1;
+ solver_set_flag(solv, SOLVER_FLAG_IGNORE_RECOMMENDED, 1);
++solver_runs;
- solver_solve(solv, &job);
-
- if (solv->problems.count)
+ if (solver_solve(solv, &job))
{
c->status = 1;
showproblems(solv, s, &cand, &badguys);
cand.count = j;
}
if (PERF_DEBUGGING)
- printf(" test_can_upgrade_all_packages took %d ms in %d runs\n", sat_timems(now), solver_runs);
+ printf(" test_can_upgrade_all_packages took %d ms in %d runs\n", solv_timems(now), solver_runs);
}
void
{
Solvable *s2 = pool_id2solvable(pool, rp);
if (rp < c->updatestart
- && evrcmp(pool, rd->evr, s2->evr, EVRCMP_COMPARE) < 0
+ && pool_evrcmp(pool, rd->evr, s2->evr, EVRCMP_COMPARE) < 0
&& pool_match_nevr_rel(pool, s2, rd->name)
)
{
SHOW_PATCH(c);
printf(" conflict %s < %s satisfied by non-updated package %s\n",
- dep2str(pool, rd->name), dep2str(pool, rd->evr), solvable2str(pool, s2));
+ pool_dep2str(pool, rd->name), pool_dep2str(pool, rd->evr), pool_solvable2str(pool, s2));
break;
}
}
{
char *arch, *mypatch;
const char *pname;
- int l;
+ int l, r;
FILE *fp;
int i;
Id pid, p, pp;
int tests = 0;
context_t c;
+ static const char* langs[] = {"en"};
c.install_available = 0;
c.updatestart = 0;
arch = argv[1];
pool = pool_create();
pool_setarch(pool, arch);
- static const char* langs[] = {"en"};
pool_set_languages(pool, langs, 1);
#if 0
l = strlen(argv[i]);
if (!strcmp(argv[i], "-"))
fp = stdin;
- else if ((fp = myfopen(argv[i])) == 0)
+ else if ((fp = solv_xfopen(argv[i], 0)) == 0)
{
perror(argv[i]);
exit(1);
}
- if (l >= 8 && !strcmp(argv[i] + l - 8, "packages"))
+ r = 0;
+ if (0)
+ {
+ }
+#ifdef ENABLE_SUSEREPO
+ else if (l >= 8 && !strcmp(argv[i] + l - 8, "packages"))
{
- repo_add_susetags(c.repo, fp, 0, 0, 0);
+ r = repo_add_susetags(c.repo, fp, 0, 0, 0);
}
else if (l >= 11 && !strcmp(argv[i] + l - 11, "packages.gz"))
{
- repo_add_susetags(c.repo, fp, 0, 0, 0);
+ r = repo_add_susetags(c.repo, fp, 0, 0, 0);
}
+#endif
+#ifdef ENABLE_RPMMD
else if (l >= 14 && !strcmp(argv[i] + l - 14, "primary.xml.gz"))
{
- repo_add_rpmmd(c.repo, fp, 0, 0);
+ r = repo_add_rpmmd(c.repo, fp, 0, 0);
}
else if (l >= 17 && !strcmp(argv[i] + l - 17, "updateinfo.xml.gz"))
{
- repo_add_updateinfoxml(c.repo, fp, 0);
+ r = repo_add_updateinfoxml(c.repo, fp, 0);
}
- else if (repo_add_solv(c.repo, fp))
+#endif
+ else
+ r = repo_add_solv(c.repo, fp, 0);
+ if (r)
{
- fprintf(stderr, "could not add repo %s\n", argv[i]);
+ fprintf(stderr, "could not add repo %s: %s\n", argv[i], pool_errstr(pool));
exit(1);
}
if (fp != stdin)
c.instrepo->start = c.repo->start;
c.instrepo->end = c.repo->end;
c.instrepo->nsolvables = c.repo->nsolvables; /* sic! */
- c.instrepo->lastoff = c.repo->lastoff; /* sic! */
pool_set_installed(pool, c.instrepo);
pool_createwhatprovides(pool);
for (pid = 1; pid < pool->nsolvables; pid++)
{
+ Solvable *s;
c.shown = 0;
- Solvable *s = pool->solvables + pid;
+ s = pool->solvables + pid;
if (!s->repo)
continue;
if (!pool_installable(pool, s))
continue;
- pname = id2str(pool, s->name);
+ pname = pool_id2str(pool, s->name);
if (strncmp(pname, "patch:", 6) != 0)
continue;
l = strlen(pname + 6);
if (mypatch[l] != '-')
continue;
- if (strcmp(mypatch + l + 1, id2str(pool, s->evr)) != 0)
+ if (strcmp(mypatch + l + 1, pool_id2str(pool, s->evr)) != 0)
continue;
}
}
FOR_PROVIDES(p, pp, s->name)
{
Solvable *s2 = pool->solvables + p;
- if (evrcmp(pool, s->evr, s2->evr, EVRCMP_COMPARE) < 0)
+ if (pool_evrcmp(pool, s->evr, s2->evr, EVRCMP_COMPARE) < 0)
break;
}
if (p) {
continue;
#if 0
- printf("testing patch %s-%s\n", pname + 6, id2str(pool, s->evr));
+ printf("testing patch %s-%s\n", pname + 6, pool_id2str(pool, s->evr));
#endif
test_all_old_patches_included(&c, pid);