civodul pushed a commit to branch master
in repository guix.

commit 3ab8559436356ef89aa60135d3558681d64443ae
Author: Ludovic Courtès <[email protected]>
AuthorDate: Mon Feb 6 15:02:34 2023 +0100

    status: Print a hint when a 'package-cache' hook fails to build.
    
    * guix/channels.scm (package-cache-file): Add 'channels' to the #:properties
    list.
    * guix/status.scm (print-build-event): Upon failure, display a hint when
    the derivation is a 'package-cache' hook.
---
 guix/channels.scm |  9 +++++++--
 guix/status.scm   | 18 +++++++++++++++++-
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/guix/channels.scm b/guix/channels.scm
index 40cbc4bb3a..d44e7a0a3a 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -952,6 +952,10 @@ be used as a profile hook."
                       (backtrace))))
               (mkdir #$output))))
 
+    (define channels
+      (map (compose string->symbol manifest-entry-name)
+           (manifest-entries manifest)))
+
     (gexp->derivation-in-inferior "guix-package-cache" build
                                   profile
 
@@ -960,8 +964,9 @@ be used as a profile hook."
                                   ;; instead of failing.
                                   #:silent-failure? #t
 
-                                  #:properties '((type . profile-hook)
-                                                 (hook . package-cache))
+                                  #:properties `((type . profile-hook)
+                                                 (hook . package-cache)
+                                                 (channels . ,channels))
                                   #:local-build? #t)))
 
 (define %channel-profile-hooks
diff --git a/guix/status.scm b/guix/status.scm
index 2c69f49fb5..5580c80ea9 100644
--- a/guix/status.scm
+++ b/guix/status.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017-2022 Ludovic Courtès <[email protected]>
+;;; Copyright © 2017-2023 Ludovic Courtès <[email protected]>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <[email protected]>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -22,6 +22,7 @@
   #:use-module (guix i18n)
   #:use-module (guix colors)
   #:use-module (guix progress)
+  #:autoload   (guix ui) (display-hint)
   #:autoload   (guix build syscalls) (terminal-columns)
   #:autoload   (guix build download) (nar-uri-abbreviation)
   #:use-module (guix store)
@@ -526,6 +527,21 @@ substitutes being downloaded."
      (erase-current-line*)                      ;erase spinner or progress bar
      (format port (failure (G_ "build of ~a failed")) drv)
      (newline port)
+     (let ((properties (and=> (false-if-exception
+                               (read-derivation-from-file drv))
+                              derivation-properties)))
+       (when (and (pair? properties)
+                  (eq? (assq-ref properties 'type) 'profile-hook)
+                  (eq? (assq-ref properties 'hook) 'package-cache))
+         (display-hint (format #f (G_ "This usually indicates a bug in one of
+the channels you are pulling from, or some incompatibility among them.  You
+can check the build log and report the issue to the channel developers.
+
+The channels you are pulling from are: ~a.")
+                               (string-join
+                                (map symbol->string
+                                     (or (assq-ref properties 'channels)
+                                         '(guix))))))))
      (match (derivation-log-file drv)
        (#f
         (format port (failure (G_ "Could not find build log for '~a'."))

Reply via email to