mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-04-06 21:20:33 +02: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:
@@ -102,17 +102,16 @@
|
||||
list))
|
||||
|
||||
(test-assert "filtered-port, file"
|
||||
(let ((file (search-path %load-path "guix.scm")))
|
||||
(call-with-input-file file
|
||||
(lambda (input)
|
||||
(let*-values (((compressed pids1)
|
||||
(filtered-port `(,%gzip "-c" "--fast") input))
|
||||
((decompressed pids2)
|
||||
(filtered-port `(,%gzip "-d") compressed)))
|
||||
(and (every (compose zero? cdr waitpid)
|
||||
(append pids1 pids2))
|
||||
(equal? (get-bytevector-all decompressed)
|
||||
(call-with-input-file file get-bytevector-all))))))))
|
||||
(let* ((file (search-path %load-path "guix.scm"))
|
||||
(input (open-file file "r0")))
|
||||
(let*-values (((compressed pids1)
|
||||
(filtered-port `(,%gzip "-c" "--fast") input))
|
||||
((decompressed pids2)
|
||||
(filtered-port `(,%gzip "-d") compressed)))
|
||||
(and (every (compose zero? cdr waitpid)
|
||||
(append pids1 pids2))
|
||||
(equal? (get-bytevector-all decompressed)
|
||||
(call-with-input-file file get-bytevector-all))))))
|
||||
|
||||
(test-assert "filtered-port, non-file"
|
||||
(let ((data (call-with-input-file (search-path %load-path "guix.scm")
|
||||
|
||||
Reference in New Issue
Block a user