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

Eli Schwartz eschwartz at archlinux.org
Tue May 29 04:30:55 UTC 2018


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
 				;;
 		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
 }
-- 
2.17.0


More information about the pacman-dev mailing list