diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-01-25 11:31:06 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-01-25 11:31:06 +0100 |
commit | c2cbee8b4f19924ef374e480981645328cbe9a00 (patch) | |
tree | 572667dabe9e68269950dbe0ff5c4fb4613f37d3 | |
parent | 71fb7eac921f83fe1fbaf6da157f531f09d61718 (diff) | |
download | cuirass-c2cbee8b4f19924ef374e480981645328cbe9a00.tar cuirass-c2cbee8b4f19924ef374e480981645328cbe9a00.tar.gz |
base: Delete duplicate builds when restarting them.
* src/cuirass/base.scm (build-derivation=?): New procedure.
(restart-builds): Call 'delete-duplicates' on BUILDS.
-rw-r--r-- | src/cuirass/base.scm | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm index 1ac9e60..9e80766 100644 --- a/src/cuirass/base.scm +++ b/src/cuirass/base.scm @@ -356,14 +356,21 @@ updating DB accordingly." (_ (log-message "build event: ~s" event)))) +(define (build-derivation=? build1 build2) + "Return true if BUILD1 and BUILD2 correspond to the same derivation." + (string=? (assq-ref build1 #:derivation) + (assq-ref build2 #:derivation))) + (define (restart-builds db builds) "Restart builds whose status in DB is \"pending\" (scheduled or started)." (with-store store - (let-values (((valid stale) - (partition (lambda (build) - (let ((drv (assq-ref build #:derivation))) - (valid-path? store drv))) - builds))) + (let*-values (((builds) + (delete-duplicates builds build-derivation=?)) + ((valid stale) + (partition (lambda (build) + (let ((drv (assq-ref build #:derivation))) + (valid-path? store drv))) + builds))) ;; We cannot restart builds listed in STALE, so mark them as canceled. (log-message "canceling ~a pending builds" (length stale)) (for-each (lambda (build) |