download: Follow HTTP redirections.

* guix/build/download.scm (http-fetch): Follow the redirection when CODE
  is 302.
This commit is contained in:
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)) (http-get uri #:port connection #:decode-body? #f))
((code) ((code)
(response-code resp))) (response-code resp)))
(if (= 200 code) (case code
(begin ((200) ; OK
(call-with-output-file file (begin
(lambda (p) (call-with-output-file file
(put-bytevector p bv))) (lambda (p)
file) (put-bytevector p bv)))
(error "download failed" (uri->string uri) file))
code (response-reason-phrase resp))))) ((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 ...) (define-syntax-rule (false-if-exception* body ...)