diff options
Diffstat (limited to 'guix-data-service')
-rw-r--r-- | guix-data-service/model/derivation.scm | 23 |
1 files changed, 23 insertions, 0 deletions
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) |