aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix/gnu-maintenance.scm15
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))))))