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@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 }