summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi18
-rw-r--r--guix/scripts/gc.scm17
2 files changed, 35 insertions, 0 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index afb4108800..6a3765f56a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -814,6 +814,11 @@ builds to other machines (@pxref{Daemon Offload Setup}).
 @item --cache-failures
 Cache build failures.  By default, only successful builds are cached.
 
+When this option is used, @command{guix gc --list-failures} can be used
+to query the set of store items marked as failed; @command{guix gc
+--clear-failures} removes store items from the set of cached failures.
+@xref{Invoking guix gc}.
+
 @item --cores=@var{n}
 @itemx -c @var{n}
 Use @var{n} CPU cores to build each derivation; @code{0} means as many
@@ -1674,6 +1679,19 @@ Attempt to delete all the store files and directories specified as
 arguments.  This fails if some of the files are not in the store, or if
 they are still live.
 
+@item --list-failures
+List store items corresponding to cached build failures.
+
+This prints nothing unless the daemon was started with
+@option{--cache-failures} (@pxref{Invoking guix-daemon,
+@option{--cache-failures}}).
+
+@item --clear-failures
+Remove the specified store items from the failed-build cache.
+
+Again, this option only makes sense when the daemon is started with
+@option{--cache-failures}.  Otherwise, it does nothing.
+
 @item --list-dead
 Show the list of dead files and directories still present in the
 store---i.e., files and directories no longer reachable from any root.
diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm
index 7e06c72ccb..89a68d51d0 100644
--- a/guix/scripts/gc.scm
+++ b/guix/scripts/gc.scm
@@ -62,6 +62,10 @@ Invoke the garbage collector.\n"))
       --verify[=OPTS]    verify the integrity of the store; OPTS is a
                          comma-separated combination of 'repair' and
                          'contents'"))
+  (display (_ "
+      --list-failures    list cached build failures"))
+  (display (_ "
+      --clear-failures   remove PATHS from the set of cached failures"))
   (newline)
   (display (_ "
   -h, --help             display this help and exit"))
@@ -130,6 +134,14 @@ Invoke the garbage collector.\n"))
         (option '("referrers") #f #f
                 (lambda (opt name arg result)
                   (alist-cons 'action 'list-referrers
+                              (alist-delete 'action result))))
+        (option '("list-failures") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'action 'list-failures
+                              (alist-delete 'action result))))
+        (option '("clear-failures") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'action 'clear-failures
                               (alist-delete 'action result))))))
 
 
@@ -200,6 +212,11 @@ Invoke the garbage collector.\n"))
             (verify-store store
                           #:check-contents? (memq 'contents options)
                           #:repair? (memq 'repair options)))))
+        ((list-failures)
+         (for-each (cut simple-format #t "~a~%" <>)
+                   (query-failed-paths store)))
+        ((clear-failures)
+         (clear-failed-paths store (map direct-store-path paths)))
         ((list-dead)
          (for-each (cut simple-format #t "~a~%" <>)
                    (dead-paths store)))