aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2017-11-02 17:15:00 +0000
committerWilliam Pitcock <nenolod@dereferenced.org>2017-11-02 17:15:00 +0000
commit20ae27c1daec1e6efd19d74a2116c6a1f65e02ec (patch)
tree38455eaea530cfd7fab4e9e4fa4aa1bfeb4104ce
parent6aabb96c204c5290dd69cba6f8f163b314de702d (diff)
downloadaports-20ae27c1daec1e6efd19d74a2116c6a1f65e02ec.tar.bz2
aports-20ae27c1daec1e6efd19d74a2116c6a1f65e02ec.tar.xz
solver: prefer highest requirer count above installed status
This ensures a swap is emitted when replacing a virtual with apk add.
-rw-r--r--src/solver.c10
-rw-r--r--test/provides-swap.installed5
2 files changed, 8 insertions, 7 deletions
diff --git a/src/solver.c b/src/solver.c
index 5d73af69ce..5698215715 100644
--- a/src/solver.c
+++ b/src/solver.c
@@ -567,6 +567,11 @@ static int compare_providers(struct apk_solver_state *ss,
if (r)
return r;
+ /* Prefer highest requirer count. */
+ r = count_requirers(pkgA) - count_requirers(pkgB);
+ if (r)
+ return r;
+
/* Prefer installed */
if (!(solver_flags & APK_SOLVERF_UPGRADE)) {
r = (pkgA->ipkg != NULL) - (pkgB->ipkg != NULL);
@@ -598,11 +603,6 @@ static int compare_providers(struct apk_solver_state *ss,
if (r)
return r;
- /* Prefer highest requirer count. */
- r = count_requirers(pkgA) - count_requirers(pkgB);
- if (r)
- return r;
-
/* Prefer highest declared provider priority. */
r = pkgA->provider_priority - pkgB->provider_priority;
if (r)
diff --git a/test/provides-swap.installed b/test/provides-swap.installed
index 480def8765..259783de7f 100644
--- a/test/provides-swap.installed
+++ b/test/provides-swap.installed
@@ -1,6 +1,7 @@
-C:Q1EyN5AdpAOBJWKMR89pp/C66o+OE=
+C:Q1eVpkasfqZAukAXFYbgwt4xAEEEe=
P:mailreadplus
V:1
S:1
I:1
-
+p:mail-reader
+k:2