aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service
diff options
context:
space:
mode:
Diffstat (limited to 'guix-data-service')
-rw-r--r--guix-data-service/model/derivation.scm23
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)