size: Accept several arguments.

* guix/scripts/size.scm (display-profile): Display WHOLE at then end.
(guix-size): Accept several FILES.
* doc/guix.texi (Invoking guix size): Add example with several items.
This commit is contained in:
Ludovic Courtès 2016-05-24 21:37:13 +02:00
parent a371aa225c
commit db761534df
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 25 additions and 7 deletions

View file

@ -5058,6 +5058,24 @@ reports information based on the available substitutes
(@pxref{Substitutes}). This makes it possible it to profile disk usage of (@pxref{Substitutes}). This makes it possible it to profile disk usage of
store items that are not even on disk, only available remotely. store items that are not even on disk, only available remotely.
You can also specify several package names:
@example
$ guix size coreutils grep sed bash
store item total self
/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
@dots{}
total: 102.3 MiB
@end example
@noindent
In this example we see that the combination of the four packages takes
102.3@tie{}MiB in total, which is much less than the sum of each closure
since they have a lot of dependencies in common.
The available options are: The available options are:
@table @option @table @option

View file

@ -91,7 +91,8 @@ (define MiB (expt 2 20))
(sort profile (sort profile
(match-lambda* (match-lambda*
((($ <profile> _ _ total1) ($ <profile> _ _ total2)) ((($ <profile> _ _ total1) ($ <profile> _ _ total2))
(> total1 total2))))))) (> total1 total2)))))
(format port (_ "total: ~,1f MiB~%") (/ whole MiB 1.))))
(define display-profile* (define display-profile*
(lift display-profile %store-monad)) (lift display-profile %store-monad))
@ -280,7 +281,7 @@ (define (guix-size . args)
(match files (match files
(() (()
(leave (_ "missing store item argument\n"))) (leave (_ "missing store item argument\n")))
((file) ((files ..1)
(leave-on-EPIPE (leave-on-EPIPE
;; Turn off grafts because (1) hydra.gnu.org does not serve grafted ;; Turn off grafts because (1) hydra.gnu.org does not serve grafted
;; packages, and (2) they do not make any difference on the ;; packages, and (2) they do not make any difference on the
@ -292,13 +293,12 @@ (define (guix-size . args)
#:substitute-urls urls) #:substitute-urls urls)
(run-with-store store (run-with-store store
(mlet* %store-monad ((item (ensure-store-item file)) (mlet* %store-monad ((items (mapm %store-monad
(profile (store-profile (list item)))) ensure-store-item files))
(profile (store-profile items)))
(if map-file (if map-file
(begin (begin
(profile->page-map profile map-file) (profile->page-map profile map-file)
(return #t)) (return #t))
(display-profile* profile))) (display-profile* profile)))
#:system system))))) #:system system)))))))))
((files ...)
(leave (_ "too many arguments\n")))))))