From 2c1fb35377182d3301a265945c88deb12f0b88d4 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 27 Feb 2015 14:56:01 +0100 Subject: utils: Call the progress-report proc when 'dump-port' starts. * guix/build/utils.scm (dump-port): Add call to PROGRESS at the beginning. --- guix/build/utils.scm | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'guix/build/utils.scm') diff --git a/guix/build/utils.scm b/guix/build/utils.scm index f43451bd35..a3f8911491 100644 --- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -588,22 +588,27 @@ match the terminating newline of a line." (define* (dump-port in out #:key (buffer-size 16384) (progress (lambda (t k) (k)))) - "Read as much data as possible from IN and write it to OUT, using -chunks of BUFFER-SIZE bytes. Call PROGRESS after each successful -transfer of BUFFER-SIZE bytes or less, passing it the total number of -bytes transferred and the continuation of the transfer as a thunk." + "Read as much data as possible from IN and write it to OUT, using chunks of +BUFFER-SIZE bytes. Call PROGRESS at the beginning and after each successful +transfer of BUFFER-SIZE bytes or less, passing it the total number of bytes +transferred and the continuation of the transfer as a thunk." (define buffer (make-bytevector buffer-size)) - (let loop ((total 0) - (bytes (get-bytevector-n! in buffer 0 buffer-size))) + (define (loop total bytes) (or (eof-object? bytes) (let ((total (+ total bytes))) (put-bytevector out buffer 0 bytes) (progress total (lambda () (loop total - (get-bytevector-n! in buffer 0 buffer-size)))))))) + (get-bytevector-n! in buffer 0 buffer-size))))))) + + ;; Make sure PROGRESS is called when we start so that it can measure + ;; throughput. + (progress 0 + (lambda () + (loop 0 (get-bytevector-n! in buffer 0 buffer-size))))) (define (set-file-time file stat) "Set the atime/mtime of FILE to that specified by STAT." -- cgit v1.2.3