branch: main
commit 03c79dc5ad9b4d770d9cde7601c1924ee383a2eb
Author: Ludovic Courtès <l...@gnu.org>
AuthorDate: Mon Nov 25 14:44:21 2024 +0100

    templates: Defend against corner case on build page.
    
    * src/cuirass/templates.scm (build-details): Protect against
    ‘find-dependency’ returning #f.
---
 src/cuirass/templates.scm | 41 +++++++++++++++++++++++++----------------
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/src/cuirass/templates.scm b/src/cuirass/templates.scm
index 4be49fa..2f3c090 100644
--- a/src/cuirass/templates.scm
+++ b/src/cuirass/templates.scm
@@ -37,6 +37,7 @@
                                        version>?))
   #:use-module (cuirass config)
   #:use-module (cuirass database)
+  #:use-module (cuirass logging)
   #:use-module (cuirass remote)
   #:use-module (cuirass specification)
   #:use-module ((cuirass utils) #:select (assert))
@@ -848,25 +849,33 @@ the existing SPEC otherwise."
       (tr (th "Dependencies")
           (td
            (@ (class "dependencies"))
-           ,@(let ((dependencies
-                    (build-dependencies/id build))
+           ,@(let ((dependencies (build-dependencies/id build))
                    (max-items 10))
                (if (> (length dependencies) 0)
                    `(,(map (lambda (id index)
-                             (let* ((build (find-dependency id))
-                                    (status (build-current-status build)))
-                               `((div
-                                  ,@(if (> index (1- max-items))
-                                        '((@ (class "collapse collapse-dep")))
-                                        '())
-                                  (span (@ (class ,(status-class status))
-                                           (title ,(status-title status))
-                                           (aria-hidden "true"))
-                                        "")
-                                  " "
-                                  (a (@ (href "/build/" ,id "/details"))
-                                     ,(build-nix-name build))
-                                  (br)))))
+                             (match (find-dependency id)
+                               (#f
+                                ;; FIXME: This is not supposed to happen
+                                ;; but... it does happen sometimes.
+                                (log-error "could not find dependency ~a \
+of build ~a (~a)"
+                                           id (build-id build)
+                                           (build-nix-name build))
+                                "")
+                               (build
+                                (let ((status (build-current-status build)))
+                                  `((div
+                                     ,@(if (> index (1- max-items))
+                                           '((@ (class "collapse 
collapse-dep")))
+                                           '())
+                                     (span (@ (class ,(status-class status))
+                                              (title ,(status-title status))
+                                              (aria-hidden "true"))
+                                           "")
+                                     " "
+                                     (a (@ (href "/build/" ,id "/details"))
+                                        ,(build-nix-name build))
+                                     (br)))))))
                            dependencies
                            (iota (length dependencies)))
                      ,@(if (> (length dependencies) max-items)

Reply via email to