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 <[email protected]>
> ---
>  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
>  }
> 

Reply via email to