cbaines pushed a commit to branch trunk
in repository data-service.

commit 8635a5561b23b362babee9e0b3a04ccb79612972
Author: Christopher Baines <[email protected]>
AuthorDate: Mon Mar 10 08:20:43 2025 +0000

    Add mechanism to fix derivation inputs
    
    Some derivations are missing inputs, I don't know why, but this should allow
    for manually fixing the affected derivations.
---
 guix-data-service/model/derivation.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/guix-data-service/model/derivation.scm 
b/guix-data-service/model/derivation.scm
index 4cb8db4..215b46f 100644
--- a/guix-data-service/model/derivation.scm
+++ b/guix-data-service/model/derivation.scm
@@ -55,6 +55,7 @@
             select-fixed-output-package-derivations-in-revision
             select-derivation-outputs-in-revision
             fix-derivation-output-details-hash-encoding
+            fix-derivation-inputs
             insert-derivation-sources
             insert-derivation-source-file-nar
             insert-placeholder-derivation-source-file-nar
@@ -974,6 +975,28 @@ LOCK TABLE ONLY derivation_output_details
            ;; Recurse in case there are more to fix
            (loop (find-old-derivations-and-hashes conn))))))))
 
+(define (fix-derivation-inputs conn drv)
+  (define (derivation-missing-inputs? conn drv-id)
+    (let ((inputs (select-derivation-inputs-by-derivation-id
+                   conn
+                   drv-id)))
+      ;; TODO Detect missing inputs, as well as them all missing
+      (null? inputs)))
+
+  (with-postgresql-transaction
+   conn
+   (lambda (conn)
+     (match (select-derivation-by-file-name conn (derivation-file-name drv))
+       ((drv-id rest ...)
+        (if (derivation-missing-inputs? conn drv-id)
+            (begin
+              (insert-derivation-inputs
+               conn
+               (vector drv-id)
+               (vector drv))
+              #t)
+            #f))))))
+
 (define (derivation-output-details->derivation-output-details-ids
          conn
          derivation-output-details)

Reply via email to