[pacman-dev] [PATCH 2/3] libmakepkg: implement extendable source protocols

Allan McRae allan at archlinux.org
Mon Jun 4 06:56:18 UTC 2018


On 29/05/18 14:30, Eli Schwartz wrote:
> Lookup the existence of matching functions for each protocol, and
> fallback on the generic file handler. New source protocols can then be
> added via thirdparty libmakepkg drop-ins without requiring modifications
> to source.sh
> 
> Fixes FS#49076
> 
> Signed-off-by: Eli Schwartz <eschwartz at archlinux.org>
> ---
>  scripts/libmakepkg/source.sh.in | 46 +++++++++------------------------
>  1 file changed, 12 insertions(+), 34 deletions(-)
> 
> diff --git a/scripts/libmakepkg/source.sh.in b/scripts/libmakepkg/source.sh.in
> index 198efd5e..c07ce76d 100644
> --- a/scripts/libmakepkg/source.sh.in
> +++ b/scripts/libmakepkg/source.sh.in
> @@ -60,25 +60,15 @@ download_sources() {
>  
>  		local proto=$(get_protocol "$netfile")
>  		case "$proto" in
> -			local)
> -				download_local "$netfile"
> -				;;
> -			bzr)
> -				(( get_vcs )) && download_bzr "$netfile"
> -				;;
> -			git)
> -				(( get_vcs )) && download_git "$netfile"
> -				;;
> -			hg)
> -				(( get_vcs )) && download_hg "$netfile"
> -				;;
> -			svn)
> -				(( get_vcs )) && download_svn "$netfile"
> -				;;
> -			*)
> -				download_file "$netfile"
> +			bzr|git|hg|svn)
> +				(( get_vcs )) || continue
>  				;;

Should this be moved into the download_$proto functions?  I'd guess most
of the dropins would be for other vcs systems, and this is not extendable.

>  		esac
> +		if declare -f download_$proto > /dev/null; then
> +			download_$proto "$netfile"
> +		else
> +			download_file "$netfile"
> +		fi
>  
>  		popd &>/dev/null
>  	done
> @@ -92,22 +82,10 @@ extract_sources() {
>  	for netfile in "${all_sources[@]}"; do
>  		local file=$(get_filename "$netfile")
>  		local proto=$(get_protocol "$netfile")
> -		case "$proto" in
> -			bzr)
> -				extract_bzr "$netfile"
> -				;;
> -			git)
> -				extract_git "$netfile"
> -				;;
> -			hg)
> -				extract_hg "$netfile"
> -				;;
> -			svn)
> -				extract_svn "$netfile"
> -				;;
> -			*)
> -				extract_file "$file"
> -				;;
> -		esac
> +		if declare -f extract_$proto > /dev/null; then
> +			extract_$proto "$netfile"
> +		else
> +			extract_file "$file"
> +		fi
>  	done
>  }
> 


More information about the pacman-dev mailing list