Author: mlschroe Date: Fri Nov 16 18:25:06 2007 New Revision: 7847 URL: http://svn.opensuse.org/viewcvs/zypp?rev=7847&view=rev Log: - begone rc_output. and there was much rejoicing. Modified: trunk/sat-solver/src/solver.c trunk/sat-solver/src/solver.h trunk/sat-solver/testsuite/deptestomatic.c Modified: trunk/sat-solver/src/solver.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/solver.c?rev=7847&r1=7846&r2=7847&view=diff ============================================================================== --- trunk/sat-solver/src/solver.c (original) +++ trunk/sat-solver/src/solver.c Fri Nov 16 18:25:06 2007 @@ -543,24 +543,8 @@ } -static const char * -id2rc(Solver *solv, Id id) -{ - const char *evr; - if (solv->rc_output != 2) - return ""; - evr = id2str(solv->pool, id); - if (*evr < '0' || *evr > '9') - return "0:"; - while (*evr >= '0' && *evr <= '9') - evr++; - if (*evr != ':') - return "0:"; - return ""; -} - -/**********************************************************************************/ +/************************************************************************/ /* go through system and job rules and add direct assertions * to the decisionqueue. If we find a conflict, disable rules and @@ -594,11 +578,11 @@ solv->decisionmap[vv] = v > 0 ? 1 : -1; if (solv->pool->verbose > 3) { - Solvable *s = solv->pool->solvables + vv; - if (v < 0) - printf("removing %s-%s%s\n", id2str(solv->pool, s->name), id2rc(solv, s->evr), id2str(solv->pool, s->evr)); - else - printf("installing %s-%s%s\n", id2str(solv->pool, s->name), id2rc(solv, s->evr), id2str(solv->pool, s->evr)); + Solvable *s = solv->pool->solvables + vv; + if (v < 0) + printf("removing %s-%s.%s\n", id2str(solv->pool, s->name), id2str(solv->pool, s->evr), id2str(solv->pool, s->arch)); + else + printf("installing %s-%s.%s\n", id2str(solv->pool, s->name), id2str(solv->pool, s->evr), id2str(solv->pool, s->arch)); } continue; } @@ -637,7 +621,7 @@ if (solv->decisionq_why.elements[i] == 0) { /* conflict with rpm rule, need only disable our rule */ - printf("conflict with rpm rule [%d], disabling rule #%d\n", v, ri); + printf("conflict with rpm rule, disabling rule #%d\n", ri); if (ri < solv->systemrules) v = -(solv->ruletojob.elements[ri - solv->jobrules] + 1); queue_push(&solv->problems, v); @@ -890,7 +874,7 @@ /* * add (install) rules for solvable * for unfulfilled requirements, conflicts, obsoletes,.... - * "unflag" a resolvable if it is not installable via "addrule(solv, -n, 0)" + * add a negative assertion for solvables that are not installable */ static void @@ -939,6 +923,13 @@ dontfix = 1; /* dont care about broken rpm deps */ } + if (!dontfix && s->arch != ARCH_SRC && s->arch != ARCH_NOSRC && !pool_installable(pool, s)) + { + if (pool->verbose) + printf("package %s-%s.%s [%d] is not installable\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch), (Id)(s - pool->solvables)); + addrule(solv, -n, 0); /* uninstallable */ + } + /*----------------------------------------- * check requires of s */ @@ -981,8 +972,6 @@ if (pool->verbose) printf("package %s-%s.%s [%d] is not installable (%s)\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch), (Id)(s - pool->solvables), dep2str(pool, req)); addrule(solv, -n, 0); /* mark requestor as uninstallable */ - if (solv->rc_output) - printf(">!> !unflag %s-%s.%s[%s]\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch), repo_name(s->repo)); continue; } @@ -1008,6 +997,9 @@ } /* if, requirements */ + /* that's all we check for src packages */ + if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC) + continue; /*----------------------------------------- * check conflicts of s @@ -2020,7 +2012,7 @@ if (pool->verbose) printf("initial decisions: %d\n", solv->decisionq.count); if (pool->verbose > 3) - printdecisions (solv); + printdecisions(solv); /* start SAT algorithm */ level = 1; @@ -2639,11 +2631,6 @@ } } - if (solv->rc_output) - printf(">!> Solution #1:\n"); - - int installs = 0, uninstalls = 0, upgrades = 0; - /* print solvables to be erased */ if (installed) @@ -2657,13 +2644,7 @@ continue; if (obsoletesmap[i]) continue; - if (solv->rc_output == 2) - printf(">!> remove %s-%s%s\n", id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); - else if (solv->rc_output) - printf(">!> remove %s-%s.%s\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); - else - printf("erase %s-%s.%s\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); - uninstalls++; + printf("erase %s-%s.%s\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); } } @@ -2683,14 +2664,9 @@ if (!obsoletesmap[p]) { - if (solv->rc_output) - printf(">!> "); - printf("install %s-%s%s", id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); - if (solv->rc_output != 2) - printf(".%s", id2str(pool, s->arch)); - installs++; + printf("install %s-%s.%s", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); } - else if (!solv->rc_output) + else { printf("update %s-%s.%s (obsoletes", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); for (j = installed->start; j < installed->end; j++) @@ -2701,55 +2677,10 @@ printf(" %s-%s.%s", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); } printf(")"); - upgrades++; } - else - { - Solvable *f, *fn = 0; - for (j = installed->start; j < installed->end; j++) - { - if (obsoletesmap[j] != p) - continue; - f = pool->solvables + j; - if (fn || f->name != s->name) - { - if (solv->rc_output == 2) - printf(">!> remove %s-%s%s\n", id2str(pool, f->name), id2rc(solv, f->evr), id2str(pool, f->evr)); - else if (solv->rc_output) - printf(">!> remove %s-%s.%s\n", id2str(pool, f->name), id2str(pool, f->evr), id2str(pool, f->arch)); - uninstalls++; - } - else - fn = f; - } - if (!fn) - { - printf(">!> install %s-%s%s", id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); - if (solv->rc_output != 2) - printf(".%s", id2str(pool, s->arch)); - installs++; - } - else - { - if (solv->rc_output == 2) - printf(">!> upgrade %s-%s => %s-%s%s", id2str(pool, fn->name), id2str(pool, fn->evr), id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); - else - printf(">!> upgrade %s-%s.%s => %s-%s.%s", id2str(pool, fn->name), id2str(pool, fn->evr), id2str(pool, fn->arch), id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); - upgrades++; - } - } - if (solv->rc_output) - { - Repo *repo = s->repo; - if (repo && strcmp(repo_name(repo), "locales")) - printf("[%s]", repo_name(repo)); - } printf("\n"); } - if (solv->rc_output) - printf(">!> installs=%d, upgrades=%d, uninstalls=%d\n", installs, upgrades, uninstalls); - xfree(obsoletesmap); if (solv->suggestions.count) @@ -3118,6 +3049,8 @@ for (i = pool->nsolvables - 1; i > 0; i--) { s = pool->solvables + i; + if (s->repo == installed) + continue; if (!s->obsoletes) continue; if (!pool_installable(pool, s)) @@ -3291,10 +3224,6 @@ { case SOLVER_INSTALL_SOLVABLE: /* install specific solvable */ s = pool->solvables + what; - if (solv->rc_output) - { - printf(">!> Installing %s from channel %s\n", id2str(pool, s->name), repo_name(s->repo)); - } if (pool->verbose) printf("job: install solvable %s-%s.%s\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); addrule(solv, what, 0); /* install by Id */ Modified: trunk/sat-solver/src/solver.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/solver.h?rev=7847&r1=7846&r2=7847&view=diff ============================================================================== --- trunk/sat-solver/src/solver.h (original) +++ trunk/sat-solver/src/solver.h Fri Nov 16 18:25:06 2007 @@ -104,7 +104,6 @@ Id *obsoletes; /* obsoletes for each installed solvable */ Id *obsoletes_data; /* data area for obsoletes */ - int rc_output; /* output result compatible to redcarpet/zypp testsuite, set == 2 for pure rc (will suppress architecture) */ } Solver; /* Modified: trunk/sat-solver/testsuite/deptestomatic.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/testsuite/deptestomatic.c?rev=7847&r1=7846&r2=7847&view=diff ============================================================================== --- trunk/sat-solver/testsuite/deptestomatic.c (original) +++ trunk/sat-solver/testsuite/deptestomatic.c Fri Nov 16 18:25:06 2007 @@ -36,6 +36,8 @@ static const char *Current; +static void rc_printdecisions(Solver *solv, Queue *job); + #define MAXNAMELEN 100 static void @@ -1210,7 +1212,6 @@ solv->allowdowngrade = pd->allowdowngrade; solv->allowuninstall = pd->allowuninstall; solv->allowarchchange = pd->allowarchchange; - solv->rc_output = redcarpet ? 2 : 1; solv->noupdateprovide = 1; pd->pool->verbose = verbose; @@ -1220,7 +1221,7 @@ if (solv->problems.count) printsolutions(solv, &pd->trials); else - printdecisions(solv); + rc_printdecisions(solv, &pd->trials); // clean up solver_free(solv); @@ -1270,6 +1271,195 @@ /*-------------------------------------------------------------------*/ +static const char * +id2rc(Solver *solv, Id id) +{ + const char *evr; + if (!redcarpet) + return ""; + evr = id2str(solv->pool, id); + if (*evr < '0' || *evr > '9') + return "0:"; + while (*evr >= '0' && *evr <= '9') + evr++; + if (*evr != ':') + return "0:"; + return ""; +} + +static void +rc_printdecisions(Solver *solv, Queue *job) +{ + Pool *pool = solv->pool; + Repo *installed = solv->installed; + Id p, *obsoletesmap; + int i; + Solvable *s; + + for (i = 0; i < job->count; i += 2) + { + if (job->elements[i] == SOLVER_INSTALL_SOLVABLE) + { + s = pool->solvables + job->elements[i + 1]; + printf(">!> Installing %s from channel %s\n", id2str(pool, s->name), repo_name(s->repo)); + } + } + + obsoletesmap = (Id *)calloc(pool->nsolvables, sizeof(Id)); + if (installed) + { + for (i = 0; i < solv->decisionq.count; i++) + { + Id *pp, n; + + n = solv->decisionq.elements[i]; + if (n < 0) + continue; + if (n == SYSTEMSOLVABLE) + continue; + s = pool->solvables + n; + if (s->repo == installed) /* obsoletes don't count for already installed packages */ + continue; + FOR_PROVIDES(p, pp, s->name) + if (s->name == pool->solvables[p].name) + { + if (pool->solvables[p].repo == installed && !obsoletesmap[p]) + { + obsoletesmap[p] = n; + obsoletesmap[n]++; + } + } + } + for (i = 0; i < solv->decisionq.count; i++) + { + Id obs, *obsp; + Id *pp, n; + + n = solv->decisionq.elements[i]; + if (n < 0) + continue; + if (n == SYSTEMSOLVABLE) + continue; + s = pool->solvables + n; + if (s->repo == installed) /* obsoletes don't count for already installed packages */ + continue; + if (!s->obsoletes) + continue; + obsp = s->repo->idarraydata + s->obsoletes; + while ((obs = *obsp++) != 0) + FOR_PROVIDES(p, pp, obs) + { + if (pool->solvables[p].repo == installed && !obsoletesmap[p]) + { + obsoletesmap[p] = n; + obsoletesmap[n]++; + } + } + } + } + + printf(">!> Solution #1:\n"); + + int installs = 0, uninstalls = 0, upgrades = 0; + + /* print solvables to be erased */ + + if (installed) + { + for (i = installed->start; i < installed->end; i++) + { + s = pool->solvables + i; + if (s->repo != installed) + continue; + if (solv->decisionmap[i] >= 0) + continue; + if (obsoletesmap[i]) + continue; + if (redcarpet) + printf(">!> remove %s-%s%s\n", id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); + else + printf(">!> remove %s-%s.%s\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); + uninstalls++; + } + } + + /* print solvables to be installed */ + + for (i = 0; i < solv->decisionq.count; i++) + { + int j; + p = solv->decisionq.elements[i]; + if (p < 0) + { + if (solv->decisionq_why.elements[i] == 0 && solv->decisionmap[-p] == -1) + { + s = pool->solvables - p; + printf(">!> !unflag %s-%s.%s[%s]\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch), repo_name(s->repo)); + } + continue; + } + if (p == SYSTEMSOLVABLE) + continue; + s = pool->solvables + p; + if (installed && s->repo == installed) + continue; + + if (!obsoletesmap[p]) + { + printf(">!> "); + printf("install %s-%s%s", id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); + if (!redcarpet) + printf(".%s", id2str(pool, s->arch)); + installs++; + } + else + { + Solvable *f, *fn = 0; + for (j = installed->start; j < installed->end; j++) + { + if (obsoletesmap[j] != p) + continue; + f = pool->solvables + j; + if (fn || f->name != s->name) + { + if (redcarpet) + printf(">!> remove %s-%s%s\n", id2str(pool, f->name), id2rc(solv, f->evr), id2str(pool, f->evr)); + else + printf(">!> remove %s-%s.%s\n", id2str(pool, f->name), id2str(pool, f->evr), id2str(pool, f->arch)); + uninstalls++; + } + else + fn = f; + } + if (!fn) + { + printf(">!> install %s-%s%s", id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); + if (!redcarpet) + printf(".%s", id2str(pool, s->arch)); + installs++; + } + else + { + if (redcarpet) + printf(">!> upgrade %s-%s => %s-%s%s", id2str(pool, fn->name), id2str(pool, fn->evr), id2str(pool, s->name), id2rc(solv, s->evr), id2str(pool, s->evr)); + else + printf(">!> upgrade %s-%s.%s => %s-%s.%s", id2str(pool, fn->name), id2str(pool, fn->evr), id2str(pool, fn->arch), id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch)); + upgrades++; + } + } + Repo *repo = s->repo; + if (repo && strcmp(repo_name(repo), "locales")) + printf("[%s]", repo_name(repo)); + printf("\n"); + } + + printf(">!> installs=%d, upgrades=%d, uninstalls=%d\n", installs, upgrades, uninstalls); + + free(obsoletesmap); +} + +/*-------------------------------------------------------------------*/ + static void usage( void ) { -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org