download: Follow HTTP redirections.

* guix/build/download.scm (http-fetch): Follow the redirection when CODE
  is 302.
master
Ludovic Courtès 2012-11-12 23:09:32 +01:00
parent 87f5d36630
commit 270246defe
1 changed files with 16 additions and 8 deletions

View File

@ -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 ...)