diff options
author | Ludovic Courtès <ludo@gnu.org> | 2013-04-01 00:41:55 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2013-04-12 21:57:57 +0200 |
commit | 5477e0342f477bafc0fd23d7ea85288fdd3a0fb7 (patch) | |
tree | c2bad49a8d6d6e131f0ad826d3b6c0db7d305dd0 | |
parent | bdf06d8922e62f725f94560c1aa1f00e3392b624 (diff) |
gnu-maintenance: Adjust `http-fetch' to the various Guile versions.
* guix/gnu-maintenance.scm (http-fetch): Try #:streaming? #t, or
'http-get*', or 'http-get' as a last resort. Check whether DATA is
#f, a string, or an input port.
-rw-r--r-- | guix/gnu-maintenance.scm | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm index 979678d076..89e7f25589 100644 --- a/guix/gnu-maintenance.scm +++ b/guix/gnu-maintenance.scm @@ -66,12 +66,18 @@ (define (http-fetch uri) "Return an input port containing the textual data at URI, a string." (let*-values (((resp data) - (http-get (string->uri uri))) + (let ((uri (string->uri uri))) + ;; Try hard to use the API du jour to get an input port. + (if (version>? "2.0.7" (version)) + (if (defined? 'http-get*) + (http-get* uri) + (http-get uri)) ; old Guile, returns a string + (http-get uri #:streaming? #t)))) ; 2.0.8 or later ((code) (response-code resp))) (case code ((200) - (cond ((string<=? (version) "2.0.5") + (cond ((not data) (begin ;; XXX: Guile 2.0.5 and earlier did not support chunked transfer ;; encoding, which is required when fetching %PACKAGE-LIST-URL @@ -85,9 +91,10 @@ (response-transfer-encoding resp)) (error "download failed; use a newer Guile" uri resp))) - ((string<=? (version) "2.0.7") + ((string? data) ; old `http-get' returns a string (open-input-string data)) - (else data))) + (else ; input port + data))) (else (error "download failed" uri code (response-reason-phrase resp)))))) |