~ruther/guix-local

4a44d7bbc68ff3e363e6c166a588474cbd6c20f8 — Ludovic Courtès 11 years ago 882383a
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.
3 files changed, 21 insertions(+), 8 deletions(-)

M doc/guix.texi
M guix/ui.scm
M tests/ui.scm
M doc/guix.texi => doc/guix.texi +4 -3
@@ 1142,7 1142,8 @@ specified.

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
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.



@@ 3822,8 3823,8 @@ This works as per @command{guix build} (@pxref{Invoking guix build}).
@item --image-size=@var{size}
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
include a unit as a suffix, such as @code{MiB} for mebibytes and
@code{GB} for gigabytes.
include a unit as a suffix (@pxref{Block size, size specifications,,
coreutils, GNU Coreutils}).
@end table

Note that all the actions above, except @code{build} and @code{init},

M guix/ui.scm => guix/ui.scm +13 -5
@@ 189,14 189,22 @@ interpreted."
    ((compose inexact->exact round)
     (* num
        (match unit
          ("KiB" (expt 2 10))
          ("MiB" (expt 2 20))
          ("GiB" (expt 2 30))
          ("TiB" (expt 2 40))
          ("KB"  (expt 10 3))
          ((or "KiB" "K" "k") (expt 2 10))
          ((or "MiB" "M")     (expt 2 20))
          ((or "GiB" "G")     (expt 2 30))
          ((or "TiB" "T")     (expt 2 40))
          ((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))
          ("GB"  (expt 10 9))
          ("TB"  (expt 10 12))
          ("PB"  (expt 10 15))
          ("EB"  (expt 10 18))
          ("ZB"  (expt 10 21))
          ("YB"  (expt 10 24))
          (""    1)
          (_
           (leave (_ "unknown unit: ~a~%") unit)))))))

M tests/ui.scm => tests/ui.scm +4 -0
@@ 189,6 189,10 @@ Second line" 24))
  (inexact->exact (round (* 1.2 (expt 2 30))))
  (size->number "1.2GiB"))

(test-equal "size->number, 1T"
  (expt 2 40)
  (size->number "1T"))

(test-assert "size->number, invalid unit"
  (catch 'quit
    (lambda ()