guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/06: weather: Exit with non-zero when coverage is below 100%.


From: guix-commits
Subject: 01/06: weather: Exit with non-zero when coverage is below 100%.
Date: Fri, 13 Mar 2020 12:34:07 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit be764b47ad1079df531f016c1946cbf98ff48c41
Author: Ludovic Courtès <address@hidden>
AuthorDate: Fri Mar 13 10:53:49 2020 +0100

    weather: Exit with non-zero when coverage is below 100%.
    
    * guix/scripts/weather.scm (report-server-coverage): Return the coverage 
ratio.
    (guix-weather): Exit if and only if each server's coverage is 1.
---
 doc/guix.texi            |  7 +++++--
 guix/scripts/weather.scm | 29 +++++++++++++++++++----------
 2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 9a5b5f7..8acae26 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -10809,8 +10809,11 @@ guix weather @var{options}@dots{} 
[@var{packages}@dots{}]
 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.
+is also possible to query specific system types with @option{--system}.
+@command{guix weather} exits with a non-zero code when the fraction of
+available substitutes is below 100%.
+
+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 733986b..913c849 100644
--- a/guix/scripts/weather.scm
+++ b/guix/scripts/weather.scm
@@ -178,7 +178,8 @@ about the derivations queued, as is the case with Hydra."
 (define* (report-server-coverage server items
                                  #:key display-missing?)
   "Report the subset of ITEMS available as substitutes on SERVER.
-When DISPLAY-MISSING? is true, display the list of missing substitutes."
+When DISPLAY-MISSING? is true, display the list of missing substitutes.
+Return the coverage ratio, an exact number between 0 and 1."
   (define MiB (* (expt 2 20) 1.))
 
   (format #t (G_ "looking for ~h store items on ~a...~%")
@@ -267,7 +268,11 @@ are queued~%")
       (when (and display-missing? (not (null? missing)))
         (newline)
         (format #t (G_ "Substitutes are missing for the following items:~%"))
-        (format #t "~{  ~a~%~}" missing)))))
+        (format #t "~{  ~a~%~}" missing))
+
+      ;; Return the coverage ratio.
+      (let ((total (length items)))
+        (/ (- total (length missing)) total)))))
 
 
 ;;;
@@ -538,16 +543,20 @@ SERVER.  Display information for packages with at least 
THRESHOLD dependents."
                                   (lambda (system)
                                     (package-outputs packages system))
                                   systems))))))
-        (for-each (lambda (server)
+        (exit
+         (every (lambda (server)
+                  (define coverage
                     (report-server-coverage server items
                                             #:display-missing?
-                                            (assoc-ref opts 'display-missing?))
-                    (match (assoc-ref opts 'coverage)
-                      (#f #f)
-                      (threshold
-                       (report-package-coverage server packages systems
-                                                #:threshold threshold))))
-                  urls)))))
+                                            (assoc-ref opts 
'display-missing?)))
+                  (match (assoc-ref opts 'coverage)
+                    (#f #f)
+                    (threshold
+                     (report-package-coverage server packages systems
+                                              #:threshold threshold)))
+
+                  (= 1 coverage))
+                urls))))))
 
 ;;; Local Variables:
 ;;; eval: (put 'let/time 'scheme-indent-function 1)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]