[PATCH opkg] libopkg: pkg_hash: prefer original packages to satisfy dependencies
Daniel Golle
daniel at makrotopia.org
Sat Mar 13 02:52:31 GMT 2021
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 <daniel at makrotopia.org>
> Signed-off-by: Matthias Schiffer <mschiffer at universe-factory.net>
> ---
> 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
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list