[pacman-dev] [PATCH 3/4] makepkg: generalize download_sources

Allan McRae allan at archlinux.org
Sun Jun 3 11:40:48 EDT 2012


In order to treat all VCS sources as URLs, we need to be able to
deal with more protocols. Rewrite download_sources to use a case
statement so additional protocols are easily added.

Also fix the use of scp to not pass the protocol in the URL
(noticed by William J. Bowman <wjb at williamjbowman.com>)

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 scripts/makepkg.sh.in |   79 +++++++++++++++++++++++++++++--------------------
 1 file changed, 47 insertions(+), 32 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index fee3a40..227af5e 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -229,9 +229,7 @@ get_url() {
 }
 
 get_downloadclient() {
-	# $1 = URL with valid protocol prefix
-	local url=$1
-	local proto="${url%%://*}"
+	local proto=$1
 
 	# loop through DOWNLOAD_AGENTS variable looking for protocol
 	local i
@@ -304,38 +302,55 @@ download_sources() {
 
 	local netfile
 	for netfile in "${source[@]}"; do
-		local file=$(get_filepath "$netfile" || true)
-		if [[ -n "$file" ]]; then
-			msg2 "$(gettext "Found %s")" "${file##*/}"
-			rm -f "$srcdir/${file##*/}"
-			ln -s "$file" "$srcdir/"
-			continue
-		fi
-
-		file=$(get_filename "$netfile")
 		local url=$(get_url "$netfile")
-
-		# if we get here, check to make sure it was a URL, else fail
-		if [[ $file = "$url" ]]; then
-			error "$(gettext "%s was not found in the build directory and is not a URL.")" "$file"
-			exit 1 # $E_MISSING_FILE
+		local filename=$(get_filename "$netfile")
+
+		# deal with local files
+		if [[ $filename = "$url" ]]; then
+			local filepath=$(get_filepath "$netfile")
+			if [[ -n "$filepath" ]]; then
+				msg2 "$(gettext "Found %s")" "${filepath##*/}"
+				rm -f "$srcdir/${filepath##*/}"
+				ln -s "$filepath" "$srcdir/"
+				continue
+			else
+				error "$(gettext "%s was not found in the build directory and is not a URL.")" "$filename"
+				exit 1 # $E_MISSING_FILE
+			fi
 		fi
 
-		# find the client we should use for this URL
-		local dlclient
-		dlclient=$(get_downloadclient "$url") || exit $?
-
-		msg2 "$(gettext "Downloading %s...")" "$file"
-		# fix flyspray bug #3289
-		local ret=0
-		download_file "$dlclient" "$url" "$file" || ret=$?
-		if (( ret )); then
-			error "$(gettext "Failure while downloading %s")" "$file"
-			plain "$(gettext "Aborting...")"
-			exit 1
-		fi
-		rm -f "$srcdir/$file"
-		ln -s "$SRCDEST/$file" "$srcdir/"
+		local proto="${url%%://*}"
+
+		case "$proto" in
+			scp)
+				# scp downloads should not pass the protocol in the url
+				url="${url##*://}"
+				;;&
+			ftp|http|https|rsync|scp)
+				local filepath=$(get_filepath "$netfile")
+				if [[ -n "$filepath" ]]; then
+					msg2 "$(gettext "Found %s")" "${filepath##*/}"
+					rm -f "$srcdir/${filepath##*/}"
+					ln -s "$filepath" "$srcdir/"
+					continue
+				else
+					# find the client we should use for this URL
+					local dlclient
+					dlclient=$(get_downloadclient "$proto") || exit $?
+
+					msg2 "$(gettext "Downloading %s...")" "$filename"
+					local ret=0
+					download_file "$dlclient" "$url" "$filename" || ret=$?
+					if (( ret )); then
+						error "$(gettext "Failure while downloading %s")" "$filename"
+						plain "$(gettext "Aborting...")"
+						exit 1
+					fi
+					rm -f "$srcdir/$filename"
+					ln -s "$SRCDEST/$filename" "$srcdir/"
+				fi
+				;;
+		esac
 	done
 
 	popd &>/dev/null
-- 
1.7.10.3



More information about the pacman-dev mailing list