solver: do not auto select virtual-only package with one provider

This reverts most of 0dcbd933 which allowed automatic selection
of package with a "virtual provides" having only one provider.
While convenient, it creates problems if multiple versions of the
same package exist, or if in future other providers would be added
to one of the repositories. This restore the original behaviour,
and improve the error message to tell the user to mention one of
the providers explicitly.

fixes #10810
cute-signatures
Timo Teräs 2022-02-24 14:15:28 +02:00
parent 86d75e10f5
commit e4dc2373d6
5 changed files with 12 additions and 2 deletions

View File

@ -531,6 +531,10 @@ static void analyze_name(struct print_state *ps, struct apk_name *name)
snprintf(tmp, sizeof(tmp), "%s (virtual)", name->name);
ps->label = tmp;
label_start(ps, "note:");
apk_print_indented_words(&ps->i, "please select one of the 'provided by' packages explicitly");
label_end(ps);
label_start(ps, "provided by:");
foreach_array_item(p0, name->providers)
p0->pkg->name->state_int++;

View File

@ -715,8 +715,8 @@ static void select_package(struct apk_solver_state *ss, struct apk_name *name)
if (p->version == &apk_atom_null &&
p->pkg->name->auto_select_virtual == 0 &&
p->pkg->name->ss.requirers == 0 &&
(p->pkg->provider_priority == 0 && name->providers->num > 1)) {
dbg_printf(" ignore: virtual package without provider_priority with >1 provider\n");
p->pkg->provider_priority == 0) {
dbg_printf(" ignore: virtual package without provider_priority\n");
continue;
}
if (compare_providers(ss, p, &chosen) > 0) {

View File

@ -5,6 +5,8 @@ add conflicted-dep
@EXPECT
ERROR: unable to select packages:
conflicted-provider (virtual):
note: please select one of the 'provided by'
packages explicitly
provided by: conflicted-provider-a
conflicted-provider-b
required by: conflicted-dep-0.1[conflicted-provider]

View File

@ -5,6 +5,8 @@ add conflicted-parent
@EXPECT
ERROR: unable to select packages:
conflicted-provider (virtual):
note: please select one of the 'provided by'
packages explicitly
provided by: conflicted-provider-a
conflicted-provider-b
required by: conflicted-dep-0.1[conflicted-provider]

View File

@ -4,6 +4,8 @@ add conflicted-provider
@EXPECT
ERROR: unable to select packages:
conflicted-provider (virtual):
note: please select one of the 'provided by'
packages explicitly
provided by: conflicted-provider-a
conflicted-provider-b
required by: world[conflicted-provider]