diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2018-05-29 05:30:29 +0200 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2019-01-22 00:38:31 +0100 |
commit | 9c817b654996249b8022e189ee7e2692f4668431 (patch) | |
tree | a1473a326760a261a671dfd7af354be1e7f1a451 /scripts/libmakepkg/source.sh.in | |
parent | ac0e21a6df65c3770920be39b3fe14d8b49f637b (diff) | |
download | pacman-9c817b654996249b8022e189ee7e2692f4668431.tar.gz pacman-9c817b654996249b8022e189ee7e2692f4668431.tar.xz |
libmakepkg: implement extendable source protocols
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: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'scripts/libmakepkg/source.sh.in')
-rw-r--r-- | scripts/libmakepkg/source.sh.in | 47 |
1 files changed, 10 insertions, 37 deletions
diff --git a/scripts/libmakepkg/source.sh.in b/scripts/libmakepkg/source.sh.in index 198efd5e..2cb7dae1 100644 --- a/scripts/libmakepkg/source.sh.in +++ b/scripts/libmakepkg/source.sh.in @@ -59,26 +59,11 @@ download_sources() { pushd "$SRCDEST" &>/dev/null 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" - ;; - esac + if declare -f download_$proto > /dev/null; then + download_$proto "$netfile" + else + download_file "$netfile" + fi popd &>/dev/null done @@ -92,22 +77,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 } |