summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-10-05 23:05:19 +0200
committerLudovic Courtès <ludo@gnu.org>2018-10-05 23:54:18 +0200
commit42384b517ed5352bb50fb9c0c5f49b168c198004 (patch)
tree2b72e8ac905c0454f5bfa4149c80667e44f8ddd9
parent11ff2adc74f3c168cadb6cc5bf7f4be08442b9ea (diff)
downloadguix-42384b517ed5352bb50fb9c0c5f49b168c198004.tar.gz
progress: Fix total size in "@ download-succeeded" traces.
Fixes a regression introduced in
1d0be47ab680db938ac8da1ee65e1de91e198f67 whereby the total size for
directories (coming from substitutes) would be 4KiB.  This led the
progress bar to go back to the start, typically.

* guix/progress.scm (progress-reporter/trace): Add 'total'.  In 'start',
initialize it.  Adjust 'report' to update it.  Adjust 'stop' to prefer
SIZE as the actual size and then TOTAL.  Do not use the size of FILE as
the total since that could be 4KiB when FILE is a directory.
-rw-r--r--guix/progress.scm11
1 files changed, 8 insertions, 3 deletions
diff --git a/guix/progress.scm b/guix/progress.scm
index f846944952..9da667a027 100644
--- a/guix/progress.scm
+++ b/guix/progress.scm
@@ -289,6 +289,8 @@ tasks is performed.  Write PREFIX at the beginning of the line."
                                   #:optional (log-port (current-output-port)))
   "Like 'progress-reporter/file', but instead of returning human-readable
 progress reports, write \"build trace\" lines to be processed elsewhere."
+  (define total 0)                                ;bytes transferred
+
   (define (report-progress transferred)
     (define message
       (format #f "@ download-progress ~a ~a ~a ~a~%"
@@ -299,13 +301,16 @@ progress reports, write \"build trace\" lines to be processed elsewhere."
 
   (progress-reporter
    (start (lambda ()
+            (set! total 0)
             (display (format #f "@ download-started ~a ~a ~a~%"
                              file url (or size "-"))
                      log-port)))
-   (report (rate-limited report-progress %progress-interval))
+   (report (let ((report (rate-limited report-progress %progress-interval)))
+             (lambda (transferred)
+               (set! total transferred)
+               (report transferred))))
    (stop (lambda ()
-           (let ((size (or (and=> (stat file #f) stat:size)
-                           size)))
+           (let ((size (or size total)))
              (report-progress size)
              (display (format #f "@ download-succeeded ~a ~a ~a~%"
                               file url size)