diff options
Diffstat (limited to 'guix-build-coordinator/build-allocator.scm')
-rw-r--r-- | guix-build-coordinator/build-allocator.scm | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm index 6a17246..614bd0f 100644 --- a/guix-build-coordinator/build-allocator.scm +++ b/guix-build-coordinator/build-allocator.scm @@ -198,6 +198,19 @@ (define deferred-builds-last-count 0) + (define (all-inputs-built? derivation) + (let ((inputs (datastore-find-derivation-inputs + datastore + derivation))) + (every (lambda (input-details) + (let ((output (assq-ref input-details 'output))) + (any (lambda (output-build) + (string=? (or (assq-ref output-build 'result) + "unknown") + "success")) + (cached/list-builds-for-output output)))) + inputs))) + (define (push-deferred-builds-to-the-back builds-list) (let loop ((result '()) (builds builds-list) @@ -230,8 +243,10 @@ (let-values (((ready-builds other-builds) (partition (lambda (build) - (hash-ref builds-ready-to-go-hash - (assq-ref build 'uuid))) + (or (hash-ref builds-ready-to-go-hash + (assq-ref build 'uuid)) + (all-inputs-built? + (assq-ref build 'derivation-name)))) builds-list))) (append ready-builds (push-deferred-builds-to-the-back other-builds)))) |