diff options
author | Steve Sprang <scs@stevesprang.com> | 2015-09-09 13:59:52 -0700 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2015-09-14 23:36:26 -0400 |
commit | eb95ace9f191a7291e6daf9c4af8759237408696 (patch) | |
tree | cefc432ad10a85416a9607d43a8c64c0f5e35ba3 | |
parent | d89e0990f50a00cd4eddd781f31c7a801b0bc9c3 (diff) |
download: Avoid type errors when formatting download progress output.
* guix/build/download.scm (nearest-exact-integer): New procedure.
(seconds->string, byte-count->string): Use it.
-rw-r--r-- | guix/build/download.scm | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/guix/build/download.scm b/guix/build/download.scm index 6e85174bc9..31d60fbcda 100644 --- a/guix/build/download.scm +++ b/guix/build/download.scm @@ -49,6 +49,11 @@ ;; Size of the HTTP receive buffer. 65536) +(define (nearest-exact-integer x) + "Given a real number X, return the nearest exact integer, with ties going to +the nearest exact even integer." + (inexact->exact (round x))) + (define (duration->seconds duration) "Return the number of seconds represented by DURATION, a 'time-duration' object, as an inexact number." @@ -60,7 +65,7 @@ object, as an inexact number." format." (if (not (number? duration)) "00:00:00" - (let* ((total-seconds (inexact->exact (round duration))) + (let* ((total-seconds (nearest-exact-integer duration)) (extra-seconds (modulo total-seconds 3600)) (hours (quotient total-seconds 3600)) (mins (quotient extra-seconds 60)) @@ -75,8 +80,8 @@ way." (GiB (expt 1024. 3)) (TiB (expt 1024. 4))) (cond - ((< size KiB) (format #f "~dB" (inexact->exact size))) - ((< size MiB) (format #f "~dKiB" (inexact->exact (round (/ size KiB))))) + ((< size KiB) (format #f "~dB" (nearest-exact-integer size))) + ((< size MiB) (format #f "~dKiB" (nearest-exact-integer (/ size KiB)))) ((< size GiB) (format #f "~,1fMiB" (/ size MiB))) ((< size TiB) (format #f "~,2fGiB" (/ size GiB))) (else (format #f "~,3fTiB" (/ size TiB)))))) |