aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/coordinator.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/coordinator.scm')
-rw-r--r--guix-build-coordinator/coordinator.scm24
1 files changed, 21 insertions, 3 deletions
diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm
index 7841502..2367d40 100644
--- a/guix-build-coordinator/coordinator.scm
+++ b/guix-build-coordinator/coordinator.scm
@@ -274,8 +274,21 @@
0))
(define (build-for-output-already-exists?)
- (let ((system (datastore-find-derivation-system datastore
- derivation-file)))
+ ;; Handle the derivation not existing in the database here, so that adding
+ ;; it to the database isn't required for this code to work
+ (let ((system (or (datastore-find-derivation-system datastore
+ derivation-file)
+ (derivation-system
+ (read-derivation-from-file derivation-file))))
+ (outputs (or (datastore-find-derivation-outputs datastore
+ derivation-file)
+ (map
+ (match-lambda
+ ((name . output)
+ `((name . ,name)
+ (output . ,(derivation-output-path output)))))
+ (derivation-outputs
+ (read-derivation-from-file derivation-file))))))
(any
(lambda (output-details)
(let ((builds-for-output
@@ -285,7 +298,7 @@
system
#:include-canceled? #f)))
(not (null? builds-for-output))))
- (datastore-find-derivation-outputs datastore derivation-file))))
+ outputs)))
(define (store-build derivation-name
uuid
@@ -310,6 +323,11 @@
(random-v4-uuid)))
(define (perform-datastore-changes db)
+ (unless (datastore-find-derivation datastore derivation-file)
+ (datastore-store-derivation
+ datastore
+ (read-derivation-from-file derivation-file)))
+
;; Actually create a build
(when ensure-all-related-derivation-outputs-have-builds?
(let ((derivations-lacking-builds