diff options
Diffstat (limited to 'guix/build/download.scm')
-rw-r--r-- | guix/build/download.scm | 24 |
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 ...) |