summaryrefslogtreecommitdiffstats
path: root/abuild.in
diff options
context:
space:
mode:
authorOliver Smith <ollieparanoid@bitmessage.ch>2018-04-11 20:19:35 +0200
committerNatanael Copa <ncopa@alpinelinux.org>2018-10-03 08:33:52 +0000
commit07d9f3bf6b97d7c8543a911a2ea02db4645c82e2 (patch)
treeb19b16462b1cfc87da68414de57bd296ecaa7fd9 /abuild.in
parent3d0080de5ee61170542004e6172460d5feb73382 (diff)
downloadabuild-07d9f3bf6b97d7c8543a911a2ea02db4645c82e2.tar.bz2
abuild-07d9f3bf6b97d7c8543a911a2ea02db4645c82e2.tar.xz
Fix: incomplete partfile gets renamed to distfile
Abuild-fetch uses curl (fallback to wget) to download files. They are saved with a ".part" extension first, so they can be resumed if necessary. When the download is through, the ".part" extension gets removed. However, when the server does not support resume of downloads (e.g. GitHub's on the fly generated tarballs), then the ".part" extension got removed anyway. Abuild aborts in that case. But when running a third time, the distfile exists and it is assumed that this is the full download. Changes: * abuild-fetch: * Only remove the ".part" extension, when curl/wget exit with 0 * Pass the exit code from curl/wget as exit code of abuild-fetch * Wherever abuild-fetch would return an exit code on its own, the codes have been changed to be > 200 (so they don't collide with curl's as of now 92 exit codes) * Remove undocumented feature of downloading multiple source URLs at a time. This doesn't match with the usage description, was not used in abuild at all and it would have made it impossible to pass the exit code. * abuild: * After downloading, when curl is installed and abuild-fetch has 33 as exit code (curl's HTTP range error), then delete the partfile and try the download again.
Diffstat (limited to 'abuild.in')
-rw-r--r--abuild.in13
1 files changed, 12 insertions, 1 deletions
diff --git a/abuild.in b/abuild.in
index d52c0bf..8f2af25 100644
--- a/abuild.in
+++ b/abuild.in
@@ -332,9 +332,20 @@ sourcecheck() {
uri_fetch() {
local uri="$1"
+ local status=0
mkdir -p "$SRCDEST"
msg "Fetching $uri"
- abuild-fetch -d "$SRCDEST" "$uri"
+ abuild-fetch -d "$SRCDEST" "$uri" || status=$?
+
+ # try again when server does not support resume
+ if [ "$status" -eq 33 ] && command -v curl > /dev/null; then
+ local partfile="$SRCDEST/$(filename_from_uri $uri).part"
+ msg "Removing partial download and trying again: $partfile"
+ rm "$partfile"
+ uri_fetch "$uri"
+ else
+ return $status
+ fi
}
is_remote() {