Mailinglist Archive: zypp-commit (606 mails)

< Previous Next >
[zypp-commit] r9553 - /trunk/sat-solver/src/solver.c
  • From: mlschroe@xxxxxxxxxxxxxxxx
  • Date: Fri, 11 Apr 2008 17:35:35 -0000
  • Message-id: <20080411173535.8279D29956@xxxxxxxxxxxxxxxx>
Author: mlschroe
Date: Fri Apr 11 19:35:35 2008
New Revision: 9553

URL: http://svn.opensuse.org/viewcvs/zypp?rev=9553&view=rev
Log:
- cleanup
- calculate recommends/suggests even if there are problems
- do not trash solver resolt when refining suggestions

Modified:
trunk/sat-solver/src/solver.c

Modified: trunk/sat-solver/src/solver.c
URL:
http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/solver.c?rev=9553&r1=9552&r2=9553&view=diff
==============================================================================
--- trunk/sat-solver/src/solver.c (original)
+++ trunk/sat-solver/src/solver.c Fri Apr 11 19:35:35 2008
@@ -27,7 +27,6 @@


#define RULES_BLOCK 63
-#define REGARD_RECOMMENDS_OF_INSTALLED_ITEMS 1


int
@@ -2394,22 +2393,11 @@
if (n != solv->nrules) /* continue if level < systemlevel */
continue;

- if (doweak && !solv->problems.count)
+ if (doweak)
{
int qcount;

POOL_DEBUG(SAT_DEBUG_STATS, "installing recommended packages\n");
-#if 0
- if (!solv->dosplitprovides && !REGARD_RECOMMENDS_OF_INSTALLED_ITEMS)
- {
- for (i = 1; i < solv->decisionq.count; i++)
- {
- p = solv->decisionq.elements[i];
- if (p > 0 && pool->solvables[p].repo == solv->installed)
- solv->decisionmap[p] = -solv->decisionmap[p];
- }
- }
-#endif
queue_empty(&dq);
for (i = 1; i < pool->nsolvables; i++)
{
@@ -2453,17 +2441,6 @@
queue_pushunique(&dq, i);
}
}
-#if 0
- if (!solv->dosplitprovides && !REGARD_RECOMMENDS_OF_INSTALLED_ITEMS)
- {
- for (i = 1; i < solv->decisionq.count; i++)
- {
- p = solv->decisionq.elements[i];
- if (p > 0 && pool->solvables[p].repo == solv->installed)
- solv->decisionmap[p] = -solv->decisionmap[p];
- }
- }
-#endif
if (dq.count)
{
if (dq.count > 1)
@@ -3621,6 +3598,8 @@
Id how, what, weak, name, p, *pp, d;
Queue q, redoq;
Solvable *s;
+ int gotweak;
+ Rule *r;

/* create whatprovides if not already there */
if (!pool->whatprovides)
@@ -3953,32 +3932,27 @@
run_solver(solv, 1, solv->dontinstallrecommended ? 0 : 1);

queue_init(&redoq);
- if (!solv->problems.count)
+ gotweak = 0;
+ /* disable all weak erase rules for recommened/suggestes search */
+ for (i = 1, r = solv->rules + i; i < solv->learntrules; i++, r++)
{
- int gotweak = 0;
- Rule *r;
-
- /* disable all weak erase rules for recommened/suggestes search */
- for (i = 1, r = solv->rules + i; i < solv->learntrules; i++, r++)
- {
- if (!MAPTST(&solv->weakrulemap, i))
- continue;
- if (!r->w1)
- continue;
- disablerule(solv, r);
- gotweak++;
- }
- if (gotweak)
- {
- enabledisablelearntrules(solv);
- removedisabledconflicts(solv, &redoq);
- }
+ if (!MAPTST(&solv->weakrulemap, i))
+ continue;
+ if (!r->w1)
+ continue;
+ disablerule(solv, r);
+ gotweak++;
+ }
+ if (gotweak)
+ {
+ enabledisablelearntrules(solv);
+ removedisabledconflicts(solv, &redoq);
}

/* find recommended packages */
/* if q.count == 0 we already found all recommended in the
* solver run */
- if (!solv->problems.count && (redoq.count || solv->dontinstallrecommended))
+ if (redoq.count || solv->dontinstallrecommended)
{
Id rec, *recp, p, *pp;

@@ -4030,7 +4004,7 @@
}

/* find suggested packages */
- if (!solv->problems.count)
+ if (1)
{
Id sug, *sugp, p, *pp;

@@ -4084,9 +4058,33 @@
solv->decisionmap[redoq.elements[i]] = redoq.elements[i + 1];
}

- queue_free(&redoq);
+
if (solv->problems.count)
- problems_to_solutions(solv, job);
+ {
+ int recocount = solv->recommendations.count;
+ solv->recommendations.count = 0; /* so that revert() doesn't mess with
it */
+ queue_empty(&redoq);
+ for (i = 0; i < solv->decisionq.count; i++)
+ {
+ Id p = solv->decisionq.elements[i];
+ queue_push(&redoq, p);
+ queue_push(&redoq, solv->decisionq_why.elements[i]);
+ queue_push(&redoq, solv->decisionmap[p > 0 ? p : -p]);
+ }
+ problems_to_solutions(solv, job);
+ memset(solv->decisionmap, 0, pool->nsolvables * sizeof(Id));
+ queue_empty(&solv->decisionq);
+ queue_empty(&solv->decisionq_why);
+ for (i = 0; i < redoq.count; i += 3)
+ {
+ Id p = redoq.elements[i];
+ queue_push(&solv->decisionq, p);
+ queue_push(&solv->decisionq_why, redoq.elements[i + 1]);
+ solv->decisionmap[p > 0 ? p : -p] = redoq.elements[i + 2];
+ }
+ solv->recommendations.count = recocount;
+ }
+ queue_free(&redoq);
}

/***********************************************************************/

--
To unsubscribe, e-mail: zypp-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: zypp-commit+help@xxxxxxxxxxxx

< Previous Next >
This Thread
  • No further messages