M doc/guix.texi => doc/guix.texi +3 -0
@@ 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
M guix/scripts/refresh.scm => guix/scripts/refresh.scm +22 -5
@@ 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)