[pacman-dev] [PATCH 3/4] libalpm: short circuit alpm_find_dbs_satisfier
Allan McRae
allan at archlinux.org
Mon Oct 7 04:22:58 UTC 2019
On 9/9/19 7:45 am, morganamilo wrote:
> when a satisfying package is already installed, we always pick it
> instead of prompting the user. So we can return that package as soon as
> we find it, instead of waiting until we've iterated through all the
> databases.
> ---
Ack.
> lib/libalpm/deps.c | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
> index 322c4e7e..f69f24ad 100644
> --- a/lib/libalpm/deps.c
> +++ b/lib/libalpm/deps.c
> @@ -719,20 +719,19 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
> }
> _alpm_log(handle, ALPM_LOG_DEBUG, "provider found (%s provides %s)\n",
> pkg->name, dep->name);
> +
> + /* provide is already installed so return early instead of prompting later */
> + if(_alpm_db_get_pkgfromcache(handle->db_local, pkg->name)) {
> + alpm_list_free(providers);
> + return pkg;
> + }
> +
> providers = alpm_list_add(providers, pkg);
> /* keep looking for other providers in the all dbs */
> }
> }
> }
>
> - /* first check if one provider is already installed locally */
> - for(i = providers; i; i = i->next) {
> - alpm_pkg_t *pkg = i->data;
> - if(_alpm_db_get_pkgfromcache(handle->db_local, pkg->name)) {
> - alpm_list_free(providers);
> - return pkg;
> - }
> - }
> count = alpm_list_count(providers);
> if(count >= 1) {
> alpm_question_select_provider_t question = {
>
More information about the pacman-dev
mailing list