aboutsummaryrefslogtreecommitdiffstats
path: root/main/apk-tools/0001-solver-allow-names-with-only-one-provider-to-be-auto.patch
blob: 107676e93cd70cf98e70fe5d45961e820ca95cb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
From 0dcbd933c8d3d305395a99b7b1690a187ce5ec8c Mon Sep 17 00:00:00 2001
From: William Pitcock <nenolod@dereferenced.org>
Date: Wed, 21 Feb 2018 15:35:53 +0000
Subject: [PATCH] solver: allow names with only one provider to be autoselected
 regardless of priority

---
 src/solver.c       | 5 +++--
 test/provides.repo | 9 ++++++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/solver.c b/src/solver.c
index 91e5958..d27a7a3 100644
--- a/src/solver.c
+++ b/src/solver.c
@@ -671,11 +671,12 @@ static void select_package(struct apk_solver_state *ss, struct apk_name *name)
 			    (!p->pkg->ss.iif_triggered ||
 			     !p->pkg->ss.tag_ok))
 				continue;
-			/* Virtual packages without provider_priority cannot be autoselected */
+			/* Virtual packages without provider_priority cannot be autoselected,
+			 * unless there is only one provider */
 			if (p->version == &apk_null_blob &&
 			    p->pkg->name->auto_select_virtual == 0 &&
 			    p->pkg->name->ss.requirers == 0 &&
-			    p->pkg->provider_priority == 0)
+			    (p->pkg->provider_priority == 0 && name->providers->num > 1))
 				continue;
 			if (compare_providers(ss, p, &chosen) > 0)
 				chosen = *p;
diff --git a/test/provides.repo b/test/provides.repo
index 58bd416..358151e 100644
--- a/test/provides.repo
+++ b/test/provides.repo
@@ -82,7 +82,7 @@ P:conflicted-provider-b
 V:0.1
 S:1
 I:1
-p:conflicted-provider
+p:conflicted-provider conflicted-provider-2
 
 C:Q1EyN5AdpAOBJWKMR89ppC66ccccj=
 P:conflicted-dep
@@ -104,3 +104,10 @@ V:0.1
 S:1
 I:1
 p:self-provide
+
+C:Q1EyN5AdpAOBJWKMR89ppC66eeeej=
+P:conflicted-dep-2
+V:0.1
+S:1
+I:1
+D:conflicted-provider-2
-- 
2.16.1