summary refs log tree commit diff
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 ...)