diff --git a/doc/guix.texi b/doc/guix.texi index 873eaba490..f176bb0163 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -10089,8 +10089,17 @@ challenge}, it ignores signatures on those substitutes, which is innocuous since the command only gathers statistics and cannot install those substitutes. -Among other things, it is possible to query specific system types and -specific package sets. The available options are listed below. +The general syntax is: + +@example +guix weather @var{options}@dots{} [@var{packages}@dots{}] +@end example + +When @var{packages} is omitted, @command{guix weather} checks the availability +of substitutes for @emph{all} the packages, or for those specified with +@option{--manifest}; otherwise it only considers the specified packages. It +is also possible to query specific system types with @option{--system}. The +available options are listed below. @table @code @item --substitute-urls=@var{urls} diff --git a/guix/scripts/weather.scm b/guix/scripts/weather.scm index 4b12f9550e..78b8674e0c 100644 --- a/guix/scripts/weather.scm +++ b/guix/scripts/weather.scm @@ -252,7 +252,7 @@ are queued~%") ;;; (define (show-help) - (display (G_ "Usage: guix weather [OPTIONS] + (display (G_ "Usage: guix weather [OPTIONS] [PACKAGES ...] Report the availability of substitutes.\n")) (display (G_ " --substitute-urls=URLS @@ -469,6 +469,20 @@ SERVER. Display information for packages with at least THRESHOLD dependents." ;;; (define (guix-weather . args) + (define (package-list opts) + ;; Return the package list specified by OPTS. + (let ((file (assoc-ref opts 'manifest)) + (base (filter-map (match-lambda + (('argument . spec) + (specification->package spec)) + (_ + #f)) + opts))) + (if (and (not file) (null? base)) + (all-packages) + (append base + (if file (load-manifest file) '()))))) + (with-error-handling (parameterize ((current-terminal-columns (terminal-columns))) (let* ((opts (parse-command-line args %options @@ -481,10 +495,7 @@ SERVER. Display information for packages with at least THRESHOLD dependents." opts) (() (list (%current-system))) (systems systems))) - (packages (let ((file (assoc-ref opts 'manifest))) - (if file - (load-manifest file) - (all-packages)))) + (packages (package-list opts)) (items (with-store store (parameterize ((%graft? #f)) (concatenate