mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
substitute-binary: Pass `filtered-port' an unbuffered port.
This fixes a bug whereby `read-response' would read more than just the response, with the extra data going into the port's buffer; the "bzip2 -dc" process spawned by `filtered-port' would not see the those buffered data, which are definitely lost, and would bail out with "bzip2: (stdin) is not a bzip2 file." * guix/utils.scm (filtered-port): Document that INPUT must be unbuffered. * guix/web.scm (http-fetch): Add `buffered?' parameter. Call `open-socket-for-uri' explicitly, and call `setvbuf' when BUFFERED? is false. Pass the port to `http-get'. Close it upon 301/302. * guix/scripts/substitute-binary.scm (fetch): Add `buffered?' parameter. Pass it to `http-fetch'; honor it for `file' URIs. (guix-substitute-binary): Call `fetch' with #:buffered? #f for port RAW. * tests/utils.scm ("filtered-port, file"): Open FILE as unbuffered.
This commit is contained in:
parent
3d6b71e87e
commit
101d9f3fd4
4 changed files with 34 additions and 21 deletions
|
@ -117,15 +117,17 @@ pairs."
|
|||
(else
|
||||
(error "unmatched line" line)))))
|
||||
|
||||
(define (fetch uri)
|
||||
(define* (fetch uri #:key (buffered? #t))
|
||||
"Return a binary input port to URI and the number of bytes it's expected to
|
||||
provide."
|
||||
(case (uri-scheme uri)
|
||||
((file)
|
||||
(let ((port (open-input-file (uri-path uri))))
|
||||
(unless buffered?
|
||||
(setvbuf port _IONBF))
|
||||
(values port (stat:size (stat port)))))
|
||||
((http)
|
||||
(http-fetch uri #:text? #f))))
|
||||
(http-fetch uri #:text? #f #:buffered? buffered?))))
|
||||
|
||||
(define-record-type <cache>
|
||||
(%make-cache url store-directory wants-mass-query?)
|
||||
|
@ -423,7 +425,7 @@ indefinitely."
|
|||
(format #t "~a~%" (narinfo-hash narinfo))
|
||||
|
||||
(let*-values (((raw download-size)
|
||||
(fetch uri))
|
||||
(fetch uri #:buffered? #f))
|
||||
((input pids)
|
||||
(decompressed-port (narinfo-compression narinfo)
|
||||
raw)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue