refresh: '--list-updaters' shows updater coverage.

* guix/scripts/refresh.scm (list-updaters-and-exit): Compute the
coverage ratio of each updater and print it.  Print the coverage ratio
for all the updaters.
* doc/guix.texi (Invoking guix refresh): Document it.
master
Ludovic Courtès 2016-11-30 16:45:19 +01:00
parent 2fd370e816
commit 3676f89255
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 25 additions and 5 deletions

View File

@ -5394,6 +5394,9 @@ be used when passing @command{guix refresh} one or more package names:
@itemx -L
List available updaters and exit (see @option{--type} above.)
For each updater, display the fraction of packages it covers; at the
end, display the fraction of packages covered by all these updaters.
@item --list-dependent
@itemx -l
List top-level dependent packages that would need to be rebuilt as a

View File

@ -220,11 +220,28 @@ unavailable optional dependencies such as Guile-JSON."
(define (list-updaters-and-exit)
"Display available updaters and exit."
(format #t (_ "Available updaters:~%"))
(for-each (lambda (updater)
(format #t "- ~a: ~a~%"
(upstream-updater-name updater)
(_ (upstream-updater-description updater))))
%updaters)
(newline)
(let* ((packages (fold-packages cons '()))
(total (length packages)))
(define covered
(fold (lambda (updater covered)
(let ((matches (count (upstream-updater-predicate updater)
packages)))
;; TRANSLATORS: The parenthetical expression here is rendered
;; like "(42% coverage)" and denotes the fraction of packages
;; covered by the given updater.
(format #t (_ " - ~a: ~a (~2,1f% coverage)~%")
(upstream-updater-name updater)
(_ (upstream-updater-description updater))
(* 100. (/ matches total)))
(+ covered matches)))
0
%updaters))
(newline)
(format #t (_ "~2,1f% of the packages are covered by these updaters.~%")
(* 100. (/ covered total))))
(exit 0))
(define (warn-no-updater package)