diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2025-06-29 10:21:12 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2025-07-28 13:57:53 +0300 |
commit | cc588d8eb6a5e05bc8c9d41855685a1d8ce70187 (patch) | |
tree | 8f1091354927a109b82ba558dd7637061479b787 /guix | |
parent | cf6868187a68feea41b3cde9bd37670df7192fed (diff) |
guix gc: Adjust size suffix based on the amount of data.
* guix/ui.scm (number->size): New procedure.
* guix/scripts/gc.scm (guix-gc)[actions]: Display the amount of
collected-garbage using more specific units.
[ensure-free-space]: Display the size using an appropriate size unit.
* nix/libstore/gc.cc (deletePathRecursive, removeUnusedLinks): Same.
* nix/libstore/optimise-store.cc (showBytes): Move function ...
* nix/libstore/misc.cc: ... to here. Expand to adjust the output based
on the amount of bytes received.
Change-Id: Idceb1a13f8e45f959d327f53d1a8accb29d2678b
Diffstat (limited to 'guix')
-rw-r--r-- | guix/scripts/gc.scm | 10 | ||||
-rw-r--r-- | guix/ui.scm | 30 |
2 files changed, 35 insertions, 5 deletions
diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm index 58af827617..7663efe7f8 100644 --- a/guix/scripts/gc.scm +++ b/guix/scripts/gc.scm @@ -261,10 +261,10 @@ is deprecated; use '-D'~%")) ;; Attempt to have at least SPACE bytes available in STORE. (let ((free (free-disk-space (%store-prefix)))) (if (> free space) - (info (G_ "already ~,2h MiBs available on ~a, nothing to do~%") - (/ free 1024. 1024.) (%store-prefix)) + (info (G_ "already ~a available on ~a, nothing to do~%") + (number->size free) (%store-prefix)) (let ((to-free (- space free))) - (info (G_ "freeing ~,2h MiBs~%") (/ to-free 1024. 1024.)) + (info (G_ "freeing ~a~%") (number->size to-free)) (collect-garbage store to-free))))) (define (delete-generations store pattern) @@ -328,10 +328,10 @@ is deprecated; use '-D'~%")) (ensure-free-space store free-space)) (min-freed (let-values (((paths freed) (collect-garbage store min-freed))) - (info (G_ "freed ~,2h MiBs~%") (/ freed 1024. 1024.)))) + (info (G_ "freed ~a~%") (number->size freed)))) (else (let-values (((paths freed) (collect-garbage store))) - (info (G_ "freed ~,2h MiBs~%") (/ freed 1024. 1024.))))))) + (info (G_ "freed ~a~%") (number->size freed))))))) ((list-roots) (assert-no-extra-arguments) (list-roots)) diff --git a/guix/ui.scm b/guix/ui.scm index cd9eb1013d..d6d5eb9dcd 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -19,6 +19,7 @@ ;;; Copyright © 2018 Steve Sprang <scs@stevesprang.com> ;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info> ;;; Copyright © 2022 Liliana Marie Prikler <liliana.prikler@gmail.com> +;;; Copyright © 2025 Efraim Flashner <efraim@flashner.co.il> ;;; ;;; This file is part of GNU Guix. ;;; @@ -99,6 +100,7 @@ make-regexp* string->number* size->number + number->size show-derivation-outputs build-notifier show-what-to-build @@ -695,6 +697,34 @@ interpreted." (x (leave (G_ "unknown unit: ~a~%") unit))))))) +(define (number->size num) + "Convert NUM, an integer number of bytes, to a human readable string using +common storage prefixes." + (define (pretty-print-number number exponent) + (number->string (inexact->exact (round (/ number (expt 2 exponent)))))) + + (unless (number? num) + (leave (G_ "invalid number: ~a~%") (object->string num))) + + (cond + ((> num (expt 2 80)) + (string-append (pretty-print-number num 80) " YiB")) + ((> num (expt 2 70)) + (string-append (pretty-print-number num 70) " ZiB")) + ((> num (expt 2 60)) + (string-append (pretty-print-number num 60) " EiB")) + ((> num (expt 2 50)) + (string-append (pretty-print-number num 50) " PiB")) + ((> num (expt 2 40)) + (string-append (pretty-print-number num 40) " TiB")) + ((> num (expt 2 30)) + (string-append (pretty-print-number num 30) " GiB")) + ((> num (expt 2 20)) + (string-append (pretty-print-number num 20) " MiB")) + ((> num (expt 2 10)) + (string-append (pretty-print-number num 10) " KiB")) + (#t (string-append (number->string num) " bytes")))) + (define (display-collision-resolution-hint collision) "Display hints on how to resolve COLLISION, a &profile-collistion-error." (define (top-most-entry entry) |