summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-01-25 11:31:06 +0100
committerLudovic Courtès <ludo@gnu.org>2018-01-25 11:31:06 +0100
commitc2cbee8b4f19924ef374e480981645328cbe9a00 (patch)
tree572667dabe9e68269950dbe0ff5c4fb4613f37d3
parent71fb7eac921f83fe1fbaf6da157f531f09d61718 (diff)
downloadcuirass-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.scm17
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)