return 0;
a = aa[2] < 0 ? -aa[2] : aa[2];
b = bb[2] < 0 ? -bb[2] : bb[2];
- if (pool->disttype != DISTTYPE_DEB && a != b)
- {
- /* treat release-less versions different */
- const char *as = pool_id2str(pool, a);
- const char *bs = pool_id2str(pool, b);
- if (strchr(as, '-'))
- {
- if (!strchr(bs, '-'))
- return -2;
- }
- else
- {
- if (strchr(bs, '-'))
- return 2;
- }
- }
- r = pool_evrcmp(pool, b, a, EVRCMP_COMPARE);
+ r = pool_evrcmp(pool, b, a, pool->disttype != DISTTYPE_DEB ? EVRCMP_MATCH_RELEASE : EVRCMP_COMPARE);
if (!r && (aa[2] < 0 || bb[2] < 0))
{
if (bb[2] >= 0)
if (aa[2] >= 0)
return -1;
}
- if (r)
- return r < 0 ? -1 : 1;
- return 0;
+ return r;
}
/* common end of sort_by_srcversion and sort_by_common_dep */
if (knid)
{
FOR_PROVIDES(p, pp, knid)
- if (solv->decisionmap[p] > 0 || (pool->installed && pool->solvables[p].repo == pool->installed))
- score = 3;
+ {
+ if (solv->decisionmap[p] > 0)
+ {
+ score = 4;
+ break;
+ }
+ else if (pool->installed && pool->solvables[p].repo == pool->installed)
+ score = 3;
+ }
}
}
}
if (knid)
{
FOR_PROVIDES(p, pp, knid)
- if (solv->decisionmap[p] > 0 || (pool->installed && pool->solvables[p].repo == pool->installed))
- score = 3;
+ {
+ if (solv->decisionmap[p] > 0)
+ {
+ score = 4;
+ break;
+ }
+ if (pool->installed && pool->solvables[p].repo == pool->installed)
+ score = 3;
+ }
}
}
}
{
score = 0;
FOR_PROVIDES(p, pp, id)
- if (solv->decisionmap[p] > 0 || (pool->installed && pool->solvables[p].repo == pool->installed))
- score = 3;
+ {
+ if (solv->decisionmap[p] > 0)
+ {
+ score = 4;
+ break;
+ }
+ if (pool->installed && pool->solvables[p].repo == pool->installed)
+ score = 3;
+ }
break;
}
}
}
}
+void
+pool_best_solvables(Pool *pool, Queue *plist, int flags)
+{
+ if (plist->count > 1)
+ prune_to_highest_prio(pool, plist);
+ if (plist->count > 1)
+ prune_to_best_arch(pool, plist);
+ if (plist->count > 1)
+ prune_to_best_version(pool, plist);
+ if (plist->count > 1)
+ {
+ dislike_old_versions(pool, plist);
+ sort_by_common_dep(pool, plist);
+ }
+}
+
/* check if there is an illegal architecture change if
* installed solvable s1 is replaced by s2 */