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)