mirror of
https://github.com/moparisthebest/pacman
synced 2025-02-28 09:21:53 -05:00
Enable support for other download protocols in makepkg
This patch fixes FS #4404 as well as adding support for future protocols by generalizing the concept of a download agent and allowing a downloader to be specified for each protocol. Original work done by Andrew Fyfe <andrew@neptune-one.net>. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
4db7948d1a
commit
df290b499a
@ -6,10 +6,18 @@
|
||||
# SOURCE ACQUISITION
|
||||
#########################################################################
|
||||
#
|
||||
#-- The FTP/HTTP download utility that makepkg should use to acquire sources
|
||||
FTPAGENT="/usr/bin/wget --continue --passive-ftp --tries=3 --waitretry=3 --no-check-certificate"
|
||||
#FTPAGENT="/usr/bin/snarf"
|
||||
#FTPAGENT="/usr/bin/lftpget -c"
|
||||
#-- The download utilities that makepkg should use to acquire sources
|
||||
# Format: 'protocol::agent'
|
||||
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3'
|
||||
'http::/usr/bin/wget -c -t 3 --waitretry=3'
|
||||
'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate'
|
||||
'rsync::/usr/bin/rsync -z'
|
||||
'scp::/usr/bin/scp -C')
|
||||
|
||||
# Other common tools:
|
||||
# /usr/bin/snarf
|
||||
# /usr/bin/lftpget -c
|
||||
# /usr/bin/curl
|
||||
|
||||
#########################################################################
|
||||
# ARCHITECTURE, COMPILE FLAGS
|
||||
|
@ -189,6 +189,39 @@ in_array() {
|
||||
return 1
|
||||
}
|
||||
|
||||
getdownloadclient() {
|
||||
# $1 = url with valid protocol prefix
|
||||
local url=$1
|
||||
local proto=$(echo $netfile | sed 's|://.*||')
|
||||
|
||||
# loop through DOWNLOAD_AGENTS variable looking for protocol
|
||||
for i in "${DLAGENTS[@]}"; do
|
||||
local handler=$(echo $i | sed 's|::.*||')
|
||||
if [ "$proto" == "$handler" ]; then
|
||||
agent=$(echo $i | sed 's|^.*::||')
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# if we didn't find an agent, return an error
|
||||
if [ -z "$agent" ]; then
|
||||
error "$(eval_gettext "There is no agent set up to handle \$proto URLs. Check /etc/makepkg.conf.")"
|
||||
error "$(gettext "Aborting...")"
|
||||
exit 1 # $E_CONFIG_ERROR # TODO: error code
|
||||
fi
|
||||
|
||||
# ensure specified program is installed
|
||||
local program="$(echo $agent | awk '{print $1 }')"
|
||||
if [ ! -x "$program" ]; then
|
||||
local baseprog=$(basename $program)
|
||||
error "$(eval_gettext "The download program \$baseprog is not installed.")"
|
||||
error "$(gettext "Aborting...")"
|
||||
exit 1 # $E_MISSING_PROGRAM # TODO: error code
|
||||
fi
|
||||
|
||||
echo "$agent"
|
||||
}
|
||||
|
||||
checkdeps() {
|
||||
[ $# -gt 0 ] || return
|
||||
|
||||
@ -674,59 +707,46 @@ fi
|
||||
|
||||
cd "$startdir"
|
||||
|
||||
# retrieve sources
|
||||
msg "$(gettext "Retrieving Sources...")"
|
||||
mkdir -p src
|
||||
cd "$startdir/src"
|
||||
|
||||
msg "$(gettext "Retrieving Sources...")"
|
||||
for netfile in ${source[@]}; do
|
||||
file=$(strip_url "$netfile")
|
||||
if [ -f "../$file" ]; then
|
||||
msg2 "$(eval_gettext "Found \$file in build dir")"
|
||||
cp "../$file" .
|
||||
continue
|
||||
elif [ -f "$SRCDEST/$file" ]; then
|
||||
msg2 "$(eval_gettext "Using cached copy of \$file")"
|
||||
cp "$SRCDEST/$file" .
|
||||
else
|
||||
# check for a download utility
|
||||
if [ -z "$FTPAGENT" ]; then
|
||||
error "$(gettext "FTPAGENT is not configured. Check the /etc/makepkg.conf file.")"
|
||||
msg "$(gettext "Aborting...")"
|
||||
exit 1
|
||||
fi
|
||||
ftpclient=$(echo $FTPAGENT | awk {'print $1'})
|
||||
if [ ! -x "$ftpclient" ]; then
|
||||
local clientname=$(basename $ftpclient)
|
||||
error "$(eval_gettext "ftpclient \$clientname is not installed.")"
|
||||
msg "$(gettext "Aborting...")"
|
||||
exit 1
|
||||
fi
|
||||
proto=$(echo "$netfile" | sed 's|://.*||')
|
||||
if [ "$proto" != "ftp" -a "$proto" != "http" -a "$proto" != "https" ]; then
|
||||
error "$(eval_gettext "\$netfile was not found in the build directory and is not a proper URL.")"
|
||||
msg "$(gettext "Aborting...")"
|
||||
exit 1
|
||||
fi
|
||||
msg2 "$(eval_gettext "Downloading \$file")"
|
||||
$FTPAGENT "$netfile"
|
||||
# fix flyspray bug #3289
|
||||
ftpret=$?
|
||||
if [ $ftpret -gt 0 ]; then
|
||||
error "$(eval_gettext "Failure while downloading \$file")"
|
||||
msg "$(gettext "Aborting...")"
|
||||
#rm "$file"
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "$SRCDEST" ]; then
|
||||
mkdir -p $SRCDEST && cp "$file" $SRCDEST
|
||||
if [ $? -ne 0 ]; then
|
||||
warning "$(eval_gettext "You do not have correct permissions to cache source in \$SRCDEST")"
|
||||
cp "$file" ..
|
||||
fi
|
||||
else
|
||||
continue
|
||||
fi
|
||||
|
||||
# find the client we should use for this URL
|
||||
dlclient=$(getdownloadclient $netfile) || exit $?
|
||||
|
||||
msg2 "$(eval_gettext "Downloading \$file")"
|
||||
# fix flyspray bug #3289
|
||||
ret=0
|
||||
$dlclient "$netfile" || ret=$?
|
||||
if [ $ret -gt 0 ]; then
|
||||
error "$(gettext "Failure while downloading $file")"
|
||||
msg "$(gettext "Aborting...")"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$SRCDEST" ]; then
|
||||
mkdir -p "$SRCDEST" && cp "$file" "$SRCDEST" || ret=$?
|
||||
if [ $ret -gt 0 ]; then
|
||||
warning "$(eval_gettext "You do not have correct permissions to cache source in \$SRCDEST")"
|
||||
cp "$file" ..
|
||||
fi
|
||||
else
|
||||
cp "$file" ..
|
||||
fi
|
||||
done
|
||||
unset netfile file dlclient ret
|
||||
|
||||
if [ "$NOEXTRACT" = "1" -o "$REPKG" = "1" ]; then
|
||||
warning "$(gettext "Skipping source integrity checks -- using existing src/ tree")"
|
||||
|
Loading…
x
Reference in New Issue
Block a user