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.
This commit is contained in:
Christopher Baines 2025-03-10 08:20:43 +00:00
parent 61d49cedb3
commit 8635a5561b

View file

@ -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)