[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