Author: mlschroe Date: Tue Apr 15 19:20:11 2008 New Revision: 9658 URL: http://svn.opensuse.org/viewcvs/zypp?rev=9658&view=rev Log: - current state of solver testing Modified: trunk/sat-solver/testsuite/yps.c Modified: trunk/sat-solver/testsuite/yps.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/testsuite/yps.c?rev=9658&r1=9657&r2=9658&view=diff ============================================================================== --- trunk/sat-solver/testsuite/yps.c (original) +++ trunk/sat-solver/testsuite/yps.c Tue Apr 15 19:20:11 2008 @@ -28,6 +28,7 @@ #include "repo_solv.h" #include "solver.h" #include "policy.h" +#include "evr.h" // find solvable by name // If repo != NULL, find there (installed packages) @@ -111,7 +112,7 @@ const char *chksum; chksum = solvable_lookup_checksum(pool->solvables + p, SOLVABLE_CHECKSUM, &chktype); printf("%s: %s\n%s[%d] %s:%s\n", solvable2str(pool, pool->solvables + p), solvable_lookup_str_poollang(pool->solvables + p, SOLVABLE_DESCRIPTION), loc, medianr, id2str(pool, chktype), chksum); - printf("%s\n", solvable_lookup_str_lang(pool->solvables + p, SOLVABLE_DESCRIPTION, "de")); + printf("DE: %s\n", solvable_lookup_str_lang(pool->solvables + p, SOLVABLE_DESCRIPTION, "de")); } } @@ -168,6 +169,8 @@ int force = 0; int noreco = 0; int weak = 0; + char *weakdeps = 0; + int forceupdate = 0; char *keep = 0; pool = pool_create(); @@ -185,13 +188,16 @@ exit(0); } - while ((c = getopt(argc, argv, "efrAvwk:")) >= 0) + while ((c = getopt(argc, argv, "uefrAvwk:W:")) >= 0) { switch(c) { case 'e': erase = 1; break; + case 'u': + forceupdate = 1; + break; case 'f': force = 1; break; @@ -204,6 +210,9 @@ case 'w': weak = SOLVER_WEAK; break; + case 'W': + weakdeps = optarg; + break; case 'k': keep = optarg; break; @@ -277,6 +286,45 @@ // setup job queue if (!argv[1][0]) ; + else if (forceupdate) + { + Id p, *pp; + Solvable *s = 0; + Queue qs; + + id = str2id(pool, argv[1], 1); + FOR_PROVIDES(p, pp, id) + { + s = pool->solvables + p; + if (s->name == id && s->repo == system) + break; + } + if (p) + { + int i, j; + + queue_init(&qs); + policy_findupdatepackages(solv, s, &qs, 0); + for (i = j = 0; i < qs.count; i++) + { + Solvable *s2 = pool->solvables + qs.elements[i]; + /* filter out same evr */ + if (s2->name == s->name && evrcmp(pool, s->evr, s2->evr, EVRCMP_MATCH_RELEASE) >= 0) + continue; + qs.elements[j++] = qs.elements[i]; + } + qs.count = j; + queue_push(&job, SOLVER_INSTALL_SOLVABLE_ONE_OF | weak); + queue_push(&job, pool_queuetowhatprovides(pool, &qs)); + queue_free(&qs); + } + else + { + /* a new one */ + queue_push(&job, SOLVER_INSTALL_SOLVABLE_NAME | weak); + queue_push(&job, id); + } + } else if (!erase) { xs = select_solvable(solv, pool, channel, argv[1]); @@ -290,6 +338,21 @@ queue_push(&job, id); } + if (weakdeps) + { + Id p, *pp; + Solvable *s; + + id = str2id(pool, weakdeps, 1); + FOR_PROVIDES(p, pp, id) + { + s = pool->solvables + p; + if (s->name != id) + continue; + queue_push(&job, SOLVER_WEAKEN_SOLVABLE_DEPS); + queue_push(&job, p); + } + } solv->fixsystem = 0; solv->updatesystem = 0; solv->allowdowngrade = 0; @@ -304,7 +367,9 @@ solver_solve(solv, &job); if (solv->problems.count) printsolutions(solv, &job); - else + printf("transaction:\n"); + printdecisions(solv); + if (1) { DUChanges duc[4]; int i; @@ -313,7 +378,6 @@ duc[1].path = "/usr/share/man"; duc[2].path = "/sbin"; duc[3].path = "/etc"; - printdecisions(solv); solver_calc_duchanges(solv, duc, 4); for (i = 0; i < 4; i++) printf("duchanges %s: %d %d\n", duc[i].path, duc[i].kbytes, duc[i].files); -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org