On Sat, Mar 13, 2021 at 02:00:40AM +0100, Matthias Schiffer wrote: > When one package "provides" another non-virtual package, prefer to use > the original package instead of the providing package. > > Example: > > Consider packages "foo" and "bar", where "foo" provides "bar". > The current code will sort all candidates by name and use the last entry > by default, so "foo" would be used to satisfy a dependency on "bar". > Change the logic to prefer the actual package "bar" in this case. >
Reviewed-by: Daniel Golle <[email protected]> > Signed-off-by: Matthias Schiffer <[email protected]> > --- > libopkg/pkg_hash.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/libopkg/pkg_hash.c b/libopkg/pkg_hash.c > index dbed3febfbbe..a07a25ec1e0b 100644 > --- a/libopkg/pkg_hash.c > +++ b/libopkg/pkg_hash.c > @@ -284,6 +284,7 @@ pkg_t > *pkg_hash_fetch_best_installation_candidate(abstract_pkg_t * apkg, > int nmatching = 0; > int wrong_arch_found = 0; > int arch_priority; > + int good_pkg_score = 0; > pkg_vec_t *matching_pkgs; > abstract_pkg_vec_t *matching_apkgs; > abstract_pkg_vec_t *provided_apkg_vec; > @@ -409,9 +410,18 @@ pkg_t > *pkg_hash_fetch_best_installation_candidate(abstract_pkg_t * apkg, > for (i = 0; i < matching_pkgs->len; i++) { > pkg_t *matching = matching_pkgs->pkgs[i]; > if (constraint_fcn(matching, cdata)) { > - opkg_msg(DEBUG, "Candidate: %s %s.\n", > - matching->name, pkg_get_string(matching, > PKG_VERSION)); > + int score = 1; > + if (strcmp(matching->name, apkg->name) == 0) > + score++; ++score; As you are not using the return value, no need for post-increment. The compiler should be able to recognize and optmize that away by now though, so probably it doesn't matter. > + > + opkg_msg(DEBUG, "Candidate: %s %s (score %d).\n", > + matching->name, pkg_get_string(matching, > PKG_VERSION), > + score); > + if (score < good_pkg_score) > + continue; > + > good_pkg_by_name = matching; > + good_pkg_score = score; > /* It has been provided by hand, so it is what user > want */ > if (matching->provided_by_hand == 1) > break; > -- > 2.30.2 > > > _______________________________________________ > openwrt-devel mailing list > [email protected] > https://lists.openwrt.org/mailman/listinfo/openwrt-devel _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
