progress: Generate valid 'download-progress' traces when the size is unknown.
authorLudovic Courtès <ludo@gnu.org>
Thu, 4 Oct 2018 08:24:34 +0000 (10:24 +0200)
committerLudovic Courtès <ludo@gnu.org>
Thu, 4 Oct 2018 08:24:34 +0000 (10:24 +0200)
Fixes <https://bugs.gnu.org/32895>.
Reported by Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>.

* guix/progress.scm (progress-reporter/trace): In 'stop', make sure SIZE
is an integer.  Previously we'd generate a "@ download-progress" trace
with #f for the 'transferred' number when downloading files whose size
is not known in advance.

guix/progress.scm

index 3b9ff40..f846944 100644 (file)
@@ -304,12 +304,12 @@ progress reports, write \"build trace\" lines to be processed elsewhere."
                      log-port)))
    (report (rate-limited report-progress %progress-interval))
    (stop (lambda ()
-           (report-progress size)
-           (display (format #f "@ download-succeeded ~a ~a ~a~%"
-                            file url
-                            (or (and=> (stat file #f) stat:size)
-                                size))
-                    log-port)))))
+           (let ((size (or (and=> (stat file #f) stat:size)
+                           size)))
+             (report-progress size)
+             (display (format #f "@ download-succeeded ~a ~a ~a~%"
+                              file url size)
+                      log-port))))))
 
 ;; TODO: replace '(@ (guix build utils) dump-port))'.
 (define* (dump-port* in out