[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