diff options
author | Christopher Baines <mail@cbaines.net> | 2020-04-13 13:58:07 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-04-13 14:00:25 +0100 |
commit | 6ffd98ba3689418f4c47efa666c018f3e443fba5 (patch) | |
tree | f51f888414c605f433be5706e311108513b4c3da /guix-build-coordinator/agent.scm | |
parent | 732d20b4ac6133acf8f991f0dcfc54b639e14a54 (diff) | |
download | build-coordinator-6ffd98ba3689418f4c47efa666c018f3e443fba5.tar build-coordinator-6ffd98ba3689418f4c47efa666c018f3e443fba5.tar.gz |
Re-work how agents handle missing inputs
Don't start the build if there are missing inputs.
Diffstat (limited to 'guix-build-coordinator/agent.scm')
-rw-r--r-- | guix-build-coordinator/agent.scm | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm index f091401..0db99eb 100644 --- a/guix-build-coordinator/agent.scm +++ b/guix-build-coordinator/agent.scm @@ -42,14 +42,33 @@ already-allocated-builds)))) (for-each (lambda (build) (let ((derivation-name (assoc-ref build "derivation-name"))) - (pre-build-process derivation-name) - (let ((result (perform-build derivation-name))) - (post-build uuid coordinator-uri password - (assoc-ref build "uuid") - derivation-name)))) + (let ((pre-build-status (pre-build-process derivation-name))) + (if (eq? (assq-ref pre-build-status 'result) 'success) + (let ((result (perform-build derivation-name))) + (post-build uuid coordinator-uri password + (assoc-ref build "uuid") + derivation-name)) + (simple-format #t "failure: ~A\n" pre-build-status))))) builds))) (define (pre-build-process derivation-name) + (define (find-missing-inputs inputs) + (let ((output-paths + (append-map derivation-input-output-paths inputs))) + + (with-store store + (fold (lambda (file result) + (if (file-exists? file) + result + (if (has-substitutes? store file) + (begin + (with-store store + (build-things store output-paths)) + result) + (cons file result)))) + '() + output-paths)))) + (let ((derivation (if (file-exists? derivation-name) (read-derivation-from-file derivation-name) @@ -63,12 +82,12 @@ (with-store store (delete-paths store output-file-names))) - (let* ((inputs (derivation-inputs derivation)) - (output-paths - (append-map derivation-input-output-paths inputs))) - - (with-store store - (build-things store output-paths)))))) + (let ((missing-inputs + (find-missing-inputs (derivation-inputs derivation)))) + (if (null? missing-inputs) + '((result . success)) + `((result . failure) + (missing-inputs . ,missing-inputs))))))) (define (perform-build derivation-name) (with-store store |