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

Signed-off-by: Allan McRae <[email protected]>
---
 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


Reply via email to