ui: Recognize the same size units as Coreutils.

* guix/ui.scm (size->number): Add a bunch of large units.  Recognize
  one-letter unit names.  Change "KB" to "kB".
* tests/ui.scm ("size->number, 1T"): New test.
* doc/guix.texi (Invoking guix gc): Add cross-reference to "Block size"
  in the Coreutils manual.
  (Invoking guix system): Likewise.
This commit is contained in:
Ludovic Courtès 2014-10-03 13:35:14 +02:00
parent 882383a9aa
commit 4a44d7bbc6
3 changed files with 21 additions and 8 deletions

View File

@ -1142,7 +1142,8 @@ specified.
When @var{min} is given, stop once @var{min} bytes have been collected. When @var{min} is given, stop once @var{min} bytes have been collected.
@var{min} may be a number of bytes, or it may include a unit as a @var{min} may be a number of bytes, or it may include a unit as a
suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes. suffix, such as @code{MiB} for mebibytes and @code{GB} for gigabytes
(@pxref{Block size, size specifications,, coreutils, GNU Coreutils}).
When @var{min} is omitted, collect all the garbage. When @var{min} is omitted, collect all the garbage.
@ -3822,8 +3823,8 @@ This works as per @command{guix build} (@pxref{Invoking guix build}).
@item --image-size=@var{size} @item --image-size=@var{size}
For the @code{vm-image} and @code{disk-image} actions, create an image For the @code{vm-image} and @code{disk-image} actions, create an image
of the given @var{size}. @var{size} may be a number of bytes, or it may of the given @var{size}. @var{size} may be a number of bytes, or it may
include a unit as a suffix, such as @code{MiB} for mebibytes and include a unit as a suffix (@pxref{Block size, size specifications,,
@code{GB} for gigabytes. coreutils, GNU Coreutils}).
@end table @end table
Note that all the actions above, except @code{build} and @code{init}, Note that all the actions above, except @code{build} and @code{init},

View File

@ -189,14 +189,22 @@ interpreted."
((compose inexact->exact round) ((compose inexact->exact round)
(* num (* num
(match unit (match unit
("KiB" (expt 2 10)) ((or "KiB" "K" "k") (expt 2 10))
("MiB" (expt 2 20)) ((or "MiB" "M") (expt 2 20))
("GiB" (expt 2 30)) ((or "GiB" "G") (expt 2 30))
("TiB" (expt 2 40)) ((or "TiB" "T") (expt 2 40))
("KB" (expt 10 3)) ((or "PiB" "P") (expt 2 50))
((or "EiB" "E") (expt 2 60))
((or "ZiB" "Z") (expt 2 70))
((or "YiB" "Y") (expt 2 80))
("kB" (expt 10 3))
("MB" (expt 10 6)) ("MB" (expt 10 6))
("GB" (expt 10 9)) ("GB" (expt 10 9))
("TB" (expt 10 12)) ("TB" (expt 10 12))
("PB" (expt 10 15))
("EB" (expt 10 18))
("ZB" (expt 10 21))
("YB" (expt 10 24))
("" 1) ("" 1)
(_ (_
(leave (_ "unknown unit: ~a~%") unit))))))) (leave (_ "unknown unit: ~a~%") unit)))))))

View File

@ -189,6 +189,10 @@ Second line" 24))
(inexact->exact (round (* 1.2 (expt 2 30)))) (inexact->exact (round (* 1.2 (expt 2 30))))
(size->number "1.2GiB")) (size->number "1.2GiB"))
(test-equal "size->number, 1T"
(expt 2 40)
(size->number "1T"))
(test-assert "size->number, invalid unit" (test-assert "size->number, invalid unit"
(catch 'quit (catch 'quit
(lambda () (lambda ()