aboutsummaryrefslogtreecommitdiff
path: root/guix/build/download.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix/build/download.scm')
-rw-r--r--guix/build/download.scm24
1 files changed, 16 insertions, 8 deletions
diff --git a/guix/build/download.scm b/guix/build/download.scm
index f3487ce9a0..7043c1b398 100644
--- a/guix/build/download.scm
+++ b/guix/build/download.scm
@@ -101,14 +101,22 @@ which is not available during bootstrap."
(http-get uri #:port connection #:decode-body? #f))
((code)
(response-code resp)))
- (if (= 200 code)
- (begin
- (call-with-output-file file
- (lambda (p)
- (put-bytevector p bv)))
- file)
- (error "download failed" (uri->string uri)
- code (response-reason-phrase resp)))))
+ (case code
+ ((200) ; OK
+ (begin
+ (call-with-output-file file
+ (lambda (p)
+ (put-bytevector p bv)))
+ file))
+ ((302) ; found (redirection)
+ (let ((uri (response-location resp)))
+ (format #t "following redirection to `~a'...~%"
+ (uri->string uri))
+ (close connection)
+ (http-fetch uri file)))
+ (else
+ (error "download failed" (uri->string uri)
+ code (response-reason-phrase resp))))))
(define-syntax-rule (false-if-exception* body ...)