~ruther/guix-local

b6952cad8dadd40f0fa44d4997583991acf8cb3f — Ludovic Courtès 12 years ago 3f69e39
substitute-binary: Try hard to avoid port buffering.

* guix/scripts/substitute-binary.scm (fetch): In the `file' case, open
  with the `b' flag, so that the coding cookie reading thing doesn't
  lead to buffering some of the data (on 2.0.5).
* tests/utils.scm ("filtered-port, file"): Open with `r0b'.  Fixes a
  test failure with Guile 2.0.5 whereby the first byte of FILE would be
  missing from DECOMPRESSED.
2 files changed, 3 insertions(+), 4 deletions(-)

M guix/scripts/substitute-binary.scm
M tests/utils.scm
M guix/scripts/substitute-binary.scm => guix/scripts/substitute-binary.scm +2 -3
@@ 143,9 143,8 @@ again."
provide."
  (case (uri-scheme uri)
    ((file)
     (let ((port (open-input-file (uri-path uri))))
       (unless buffered?
         (setvbuf port _IONBF))
     (let ((port (open-file (uri-path uri)
                            (if buffered? "rb" "r0b"))))
       (values port (stat:size (stat port)))))
    ((http)
     ;; On Guile 2.0.5, `http-fetch' fetches the whole thing at once.  So

M tests/utils.scm => tests/utils.scm +1 -1
@@ 103,7 103,7 @@

(test-assert "filtered-port, file"
  (let* ((file  (search-path %load-path "guix.scm"))
         (input (open-file file "r0")))
         (input (open-file file "r0b")))
    (let*-values (((compressed pids1)
                   (filtered-port `(,%gzip "-c" "--fast") input))
                  ((decompressed pids2)