diff options
author | William Pitcock <nenolod@dereferenced.org> | 2018-02-21 15:35:53 +0000 |
---|---|---|
committer | William Pitcock <nenolod@dereferenced.org> | 2018-02-21 15:35:53 +0000 |
commit | 0dcbd933c8d3d305395a99b7b1690a187ce5ec8c (patch) | |
tree | ee05b6252904e071e201b67700b23ef7f660ee85 | |
parent | fa762cd47677a119eddd3bc0c075de9819739cd6 (diff) | |
download | apk-tools-0dcbd933c8d3d305395a99b7b1690a187ce5ec8c.tar.gz apk-tools-0dcbd933c8d3d305395a99b7b1690a187ce5ec8c.tar.bz2 apk-tools-0dcbd933c8d3d305395a99b7b1690a187ce5ec8c.tar.xz apk-tools-0dcbd933c8d3d305395a99b7b1690a187ce5ec8c.zip |
solver: allow names with only one provider to be autoselected regardless of priority
-rw-r--r-- | src/solver.c | 5 | ||||
-rw-r--r-- | 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 |