From b607ed90cf0189d77bbebd0590b6253a9218c362 Mon Sep 17 00:00:00 2001
From: Roman Kyrylych <roman@archlinux.org>
Date: Sun, 10 Feb 2008 18:56:47 +0200
Subject: [PATCH] makepkg: Support for resuming source downloads

	download to *.part and remove the suffix if successful,
	thus md5sums will be checked only for complete files,
	and next time makepkg will resume downloading of partial file
	instead of complaining about invalid md5sums

Signed-off-by: Roman Kyrylych <roman@archlinux.org>
---
 doc/makepkg.conf.5.txt |    3 +++
 etc/makepkg.conf.in    |   10 +++++-----
 scripts/makepkg.sh.in  |   13 ++++++++++++-
 3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/doc/makepkg.conf.5.txt b/doc/makepkg.conf.5.txt
index f6e4b38..ec72e29 100644
--- a/doc/makepkg.conf.5.txt
+++ b/doc/makepkg.conf.5.txt
@@ -37,6 +37,9 @@ Options
 	well; the download URL is placed on the end of the command. This is more
 	flexible than the former `FTPAGENT` variable, as any protocol can have a
 	download agent. Several examples are provided in the default makepkg.conf.
+	All instances of `%u` will be replaced with the download URL. If present,
+	instances of `%o` will be replaced with the local filename, plus a ``.part''
+	extension, which allows yo do file resumes properly.
 
 **CARCH=**"carch"::
 	Specifies your computer architecture; possible values include such things
diff --git a/etc/makepkg.conf.in b/etc/makepkg.conf.in
index d808270..e8ac6a1 100644
--- a/etc/makepkg.conf.in
+++ b/etc/makepkg.conf.in
@@ -8,11 +8,11 @@
 #
 #-- 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')
+DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
+          'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
+          'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
+          'rsync::/usr/bin/rsync -z %u %o'
+          'scp::/usr/bin/scp -C %u %o')
 
 # Other common tools:
 # /usr/bin/snarf
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index cecda1d..751c516 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -299,6 +299,16 @@ get_downloadclient() {
 	echo "$agent"
 }
 
+get_downloadcmd() {
+	local dlagent=$1
+	local netfile=$2
+	local file=$3
+
+	local dlcmd=$(echo $dlagent | sed "s|%o|$file.part|" | sed "s|%u|$netfile|")
+
+	echo "$dlcmd"
+}
+
 check_deps() {
 	[ $# -gt 0 ] || return
 
@@ -476,12 +486,13 @@ download_sources() {
 		msg2 "$(gettext "Downloading %s...")" "$file"
 		# fix flyspray bug #3289
 		local ret=0
-		$dlclient "$netfile" || ret=$?
+		$(get_downloadcmd "$dlclient" "$netfile" "$file") || ret=$?
 		if [ $ret -gt 0 ]; then
 			error "$(gettext "Failure while downloading %s")" "$file"
 			plain "$(gettext "Aborting...")"
 			exit 1
 		fi
+		mv -f "$SRCDEST/$file.part" "$SRCDEST/$file"
 		cp -s --remove-destination "$SRCDEST/$file" "$srcdir/"
 	done
 
-- 
1.5.3.7

