From 31342ff80fc92f41d5627bc132978c65f4421d2f Mon Sep 17 00:00:00 2001
From: Mathieu Othacehe <othacehe@gnu.org>
Date: Wed, 17 Feb 2021 19:11:38 +0100
Subject: [PATCH] database: Add db-restart-build! support.

* src/cuirass/database.scm (db-restart-build!): New procedure.
* tests/database.scm (db-restart-build!): New test.
---
 src/cuirass/database.scm | 8 ++++++++
 tests/database.scm       | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index 38abce17..bd1b0386 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -69,6 +69,7 @@
             db-register-builds
             db-update-build-status!
             db-update-build-worker!
+            db-restart-build!
             db-get-build-products
             db-get-builds-by-search
             db-get-builds
@@ -833,6 +834,13 @@ UPDATE Builds SET stoptime =" now
     (exec-query/bind db "UPDATE Builds SET worker=" worker
                      "WHERE derivation=" drv ";")))
 
+(define (db-restart-build! build-id)
+  "Restart the build with BUILD-ID id."
+  (with-db-worker-thread db
+    (exec-query/bind db "UPDATE Builds SET status="
+                     (build-status scheduled)
+                     "WHERE id=" build-id ";")))
+
 (define (query->bind-arguments query-string)
   "Return a list of keys to query strings by parsing QUERY-STRING."
   (define status-values
diff --git a/tests/database.scm b/tests/database.scm
index ec77ba45..7bb08ea7 100644
--- a/tests/database.scm
+++ b/tests/database.scm
@@ -490,6 +490,12 @@ timestamp, checkouttime, evaltime) VALUES ('guix', 0, 0, 0, 0);")
       (db-update-build-status! "/new-build.drv" 1)
       (assq-ref (db-get-build "/new-build.drv") #:weather)))
 
+  (test-assert "db-restart-build!"
+    (let ((build (db-get-build "/new-build.drv")))
+      (db-restart-build! (assq-ref build #:id))
+      (eq? (assq-ref (db-get-build "/new-build.drv") #:status)
+           (build-status scheduled))))
+
   (test-assert "db-close"
     (begin
       (exec-query (%db) (format #f "DROP OWNED BY CURRENT_USER;"))
-- 
GitLab