diff options
-rw-r--r-- | src/solver.c | 6 | ||||
-rw-r--r-- | test/provides.repo | 17 | ||||
-rw-r--r-- | test/provides9.test | 9 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/solver.c b/src/solver.c index 17dbdd2..c7c9983 100644 --- a/src/solver.c +++ b/src/solver.c @@ -668,6 +668,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 */ + if (p->version == &apk_null_blob && + p->pkg->name->auto_select_virtual == 0 && + p->pkg->name->ss.requirers == 0 && + p->pkg->provider_priority == 0) + continue; if (compare_providers(ss, p, &chosen) > 0) chosen = *p; } diff --git a/test/provides.repo b/test/provides.repo index 8bc0c62..69f18cb 100644 --- a/test/provides.repo +++ b/test/provides.repo @@ -38,6 +38,7 @@ V:1 S:1 I:1 p:mail-reader +k:1 C:Q1eVpkasfqZAukAXFYbgwt4xAEEEe= P:mailreadplus @@ -45,7 +46,7 @@ V:1 S:1 I:1 p:mail-reader -k:1 +k:2 C:Q1EyN5AdpAOBJWKMR89pp/C77FFFF= P:server-a @@ -68,3 +69,17 @@ S:1 I:1 p:selfprovided=2 p:selfprovided=3 + +C:Q1EyN5AdpAOBJWKMR89ppC66aaaaj= +P:conflicted-provider-a +V:0.1 +S:1 +I:1 +p:conflicted-provider + +C:Q1EyN5AdpAOBJWKMR89ppC66bbbbj= +P:conflicted-provider-b +V:0.1 +S:1 +I:1 +p:conflicted-provider diff --git a/test/provides9.test b/test/provides9.test new file mode 100644 index 0000000..f85a367 --- /dev/null +++ b/test/provides9.test @@ -0,0 +1,9 @@ +@ARGS +--test-repo provides.repo +add conflicted-provider +@EXPECT +ERROR: unsatisfiable constraints: + conflicted-provider (virtual): + provided by: conflicted-provider-a + conflicted-provider-b + required by: world[conflicted-provider] |