From: Michael Schroeder Date: Wed, 25 Feb 2015 12:23:01 +0000 (+0100) Subject: Cleaned up branch creation code X-Git-Tag: 0.6.9~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=522301543694816b933fea6a90f4add83717d8e7;p=thirdparty%2Flibsolv.git Cleaned up branch creation code --- diff --git a/src/solver.c b/src/solver.c index 336a61f2..47abf45a 100644 --- a/src/solver.c +++ b/src/solver.c @@ -1418,6 +1418,24 @@ reorder_dq_for_jobrules(Solver *solv, int level, Queue *dq) solv->decisionmap[p] = 0; } +static void +createbranch(Solver *solv, int level, Queue *dq) +{ + Pool *pool = solv->pool; + int i; + IF_POOLDEBUG (SOLV_DEBUG_POLICY) + { + POOL_DEBUG (SOLV_DEBUG_POLICY, "creating a branch:\n"); + for (i = 0; i < dq->count; i++) + POOL_DEBUG (SOLV_DEBUG_POLICY, " - %s\n", pool_solvid2str(pool, dq->elements[i])); + } + /* multiple candidates, open a branch */ + queue_push(&solv->branches, -dq->elements[0]); + for (i = 1; i < dq->count; i++) + queue_push(&solv->branches, dq->elements[i]); + queue_push(&solv->branches, level); +} + /*------------------------------------------------------------------- * * select and install @@ -1434,46 +1452,18 @@ selectandinstall(Solver *solv, int level, Queue *dq, int disablerules, Id ruleid { Pool *pool = solv->pool; Id p; - int i; if (dq->count > 1) policy_filter_unwanted(solv, dq, POLICY_MODE_CHOOSE); - if (dq->count > 1) - { - /* XXX: didn't we already do that? */ - /* XXX: shouldn't we prefer installed packages? */ - /* XXX: move to policy.c? */ - /* choose the supplemented one */ - for (i = 0; i < dq->count; i++) - if (solver_is_supplementing(solv, pool->solvables + dq->elements[i])) - { - dq->elements[0] = dq->elements[i]; - dq->count = 1; - break; - } - } /* if we're resolving job rules and didn't resolve the installed packages yet, * do some special supplements ordering */ if (dq->count > 1 && ruleid >= solv->jobrules && ruleid < solv->jobrules_end && solv->installed && !solv->focus_installed) reorder_dq_for_jobrules(solv, level, dq); + /* if we have multiple candidates we open a branch */ if (dq->count > 1) - { - IF_POOLDEBUG (SOLV_DEBUG_POLICY) - { - POOL_DEBUG (SOLV_DEBUG_POLICY, "creating a branch:\n"); - for (i = 0; i < dq->count; i++) - POOL_DEBUG (SOLV_DEBUG_POLICY, " - %s\n", pool_solvid2str(pool, dq->elements[i])); - } - /* multiple candidates, open a branch */ - queue_push(&solv->branches, -dq->elements[0]); - for (i = 1; i < dq->count; i++) - queue_push(&solv->branches, dq->elements[i]); - queue_push(&solv->branches, level); - } + createbranch(solv, level, dq); p = dq->elements[0]; - POOL_DEBUG(SOLV_DEBUG_POLICY, "installing %s\n", pool_solvid2str(pool, p)); - return setpropagatelearn(solv, level, p, disablerules, ruleid); } @@ -2684,20 +2674,9 @@ solver_run_sat(Solver *solv, int disablerules, int doweak) } if (!dq.count) continue; + /* if we have multiple candidates we open a branch */ if (dq.count > 1) - { - /* multiple candidates, open a branch */ - IF_POOLDEBUG (SOLV_DEBUG_POLICY) - { - POOL_DEBUG (SOLV_DEBUG_POLICY, "creating a branch:\n"); - for (i = 0; i < dq.count; i++) - POOL_DEBUG (SOLV_DEBUG_POLICY, " - %s\n", pool_solvid2str(pool, dq.elements[i])); - } - queue_push(&solv->branches, -dq.elements[0]); - for (i = 1; i < dq.count; i++) - queue_push(&solv->branches, dq.elements[i]); - queue_push(&solv->branches, level); - } + createbranch(solv, level, &dq); p = dq.elements[0]; POOL_DEBUG(SOLV_DEBUG_POLICY, "installing recommended %s\n", pool_solvid2str(pool, p)); olevel = level;