From 776463ba9fa73e7d3e147b74614ca25d7c9d8785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 3 Mar 2015 22:26:52 +0100 Subject: http-client: Monkey-patch 'make-chunked-input-port' on Guile <= 2.0.11. Fixes . * guix/http-client.scm (when-guile<=2.0.5): Rename to... (when-guile<=2.0.5-or-otherwise-broken): ... this. (%web-http): New variable. Monkey-patch 'make-chunked-input-port' when %WEB-HTTP defines 'read-chunk-body'. --- guix/http-client.scm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'guix/http-client.scm') diff --git a/guix/http-client.scm b/guix/http-client.scm index 6d6af5603d..051fceecb5 100644 --- a/guix/http-client.scm +++ b/guix/http-client.scm @@ -55,7 +55,7 @@ (reason http-get-error-reason)) ; string -(define-syntax when-guile<=2.0.5 +(define-syntax when-guile<=2.0.5-or-otherwise-broken (lambda (s) (syntax-case s () ((_ body ...) @@ -64,12 +64,15 @@ ;; when using "guix pull". #'(begin body ...))))) -(when-guile<=2.0.5 +(when-guile<=2.0.5-or-otherwise-broken ;; Backport of Guile commits 312e79f8 ("Add HTTP Chunked Encoding support to ;; web modules.") and 00d3ecf2 ("http: Do not buffer HTTP chunks.") (use-modules (ice-9 rdelim)) + (define %web-http + (resolve-module '(web http))) + ;; Chunked Responses (define (read-chunk-header port) (let* ((str (read-line port)) @@ -127,6 +130,11 @@ closed it will also close PORT, unless the KEEP-ALIVE? is true." (make-custom-binary-input-port "chunked input port" read! #f #f close)) + ;; Chunked encoding support in Guile <= 2.0.11 would load whole chunks in + ;; memory---see . + (when (module-variable %web-http 'read-chunk-body) + (module-set! %web-http 'make-chunked-input-port make-chunked-input-port)) + (define (read-response-body* r) "Reads the response body from @var{r}, as a bytevector. Returns @code{#f} if there was no response body." -- cgit v1.2.3