X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tools%2Fpatchcheck.c;h=4025f92858872891887d8f0fed5f92630e15e4dd;hb=c948f862b552adbe2cdee24096357b887dfbb088;hp=90b5ee0f909ede9f0339670312d029cf89d5346b;hpb=eb046c058caf593487cc4a39d6a7bc558790928e;p=platform%2Fupstream%2Flibsolv.git diff --git a/tools/patchcheck.c b/tools/patchcheck.c index 90b5ee0..4025f92 100644 --- a/tools/patchcheck.c +++ b/tools/patchcheck.c @@ -14,19 +14,22 @@ #include #include #include -#include #include "pool.h" #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) @@ -39,7 +42,7 @@ 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); @@ -58,13 +61,13 @@ showproblems(Solver *solv, Solvable *s, Queue *cand, Queue *badguys) 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) @@ -88,19 +91,22 @@ showproblems(Solver *solv, Solvable *s, Queue *cand, Queue *badguys) 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); @@ -108,24 +114,24 @@ showproblems(Solver *solv, Solvable *s, Queue *cand, Queue *badguys) { 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; } } @@ -139,19 +145,23 @@ void 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 @@ -162,7 +172,7 @@ dump_instrepo(Repo *instrepo, Pool *pool) 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"); } @@ -199,7 +209,7 @@ typedef struct { 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; @@ -218,7 +228,7 @@ test_all_old_patches_included(context_t *c, Id pid) 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) @@ -239,16 +249,16 @@ test_all_old_patches_included(context_t *c, Id pid) 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)); } } @@ -269,7 +279,7 @@ test_all_packages_installable(context_t *c, Id pid) queue_init(&job); - now = sat_timems(0); + now = solv_timems(0); solver_runs = 0; conp = s->repo->idarraydata + s->conflicts; @@ -283,15 +293,14 @@ test_all_packages_installable(context_t *c, Id pid) /* 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"); @@ -315,13 +324,12 @@ test_all_packages_installable(context_t *c, Id pid) 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); @@ -332,7 +340,7 @@ test_all_packages_installable(context_t *c, Id pid) } 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 @@ -352,7 +360,7 @@ test_can_upgrade_all_packages(context_t *c, Id pid) queue_init(&cand); queue_init(&badguys); - now = sat_timems(0); + now = solv_timems(0); solver_runs = 0; /* Test 3: can we upgrade all packages? */ @@ -361,7 +369,7 @@ test_can_upgrade_all_packages(context_t *c, Id pid) 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; @@ -398,7 +406,7 @@ test_can_upgrade_all_packages(context_t *c, Id pid) 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); @@ -415,14 +423,12 @@ test_can_upgrade_all_packages(context_t *c, Id pid) 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); @@ -441,7 +447,7 @@ test_can_upgrade_all_packages(context_t *c, Id pid) 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 @@ -464,13 +470,13 @@ test_no_ga_package_fulfills_dependency(context_t *c, Id pid) { 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; } } @@ -482,12 +488,13 @@ main(int argc, char **argv) { 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; @@ -499,7 +506,6 @@ main(int argc, char **argv) arch = argv[1]; pool = pool_create(); pool_setarch(pool, arch); - static const char* langs[] = {"en"}; pool_set_languages(pool, langs, 1); #if 0 @@ -527,30 +533,40 @@ main(int argc, char **argv) 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) @@ -565,19 +581,19 @@ main(int argc, char **argv) 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; @@ -590,7 +606,7 @@ main(int argc, char **argv) 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; } } @@ -599,7 +615,7 @@ main(int argc, char **argv) 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) { @@ -612,7 +628,7 @@ main(int argc, char **argv) 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);