aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-02-08 11:59:42 +0100
committerLudovic Courtès <ludo@gnu.org>2018-02-08 14:19:19 +0100
commit2887b1dfa914f804607535d80f57bca34d4888fa (patch)
tree7d02ea6be2edb8a1475380f04b647e51eeb77de6
parent0ff3c232744582d6a5da81e38f6ed7a9b352e956 (diff)
downloadcuirass-2887b1dfa914f804607535d80f57bca34d4888fa.tar
cuirass-2887b1dfa914f804607535d80f57bca34d4888fa.tar.gz
database: 'db-update-build-status!' keeps stoptime unchanged when nothing new.
* src/cuirass/database.scm (db-update-build-status!): And "AND status != ?" in SQL queries. * tests/database.scm ("database")["db-update-build-status!"]: Add call to 'db-update-build-status!'.
-rw-r--r--src/cuirass/database.scm13
-rw-r--r--tests/database.scm5
2 files changed, 14 insertions, 4 deletions
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index 67a0d08..a40a2d8 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -262,13 +262,18 @@ log file for DRV."
(sqlite-exec db "UPDATE Builds SET starttime=?, status=? \
WHERE derivation=?;"
now status drv)
+
+ ;; Update only if we're switching to a different status; otherwise leave
+ ;; things unchanged. This ensures that 'stoptime' remains valid and
+ ;; doesn't change every time we mark DRV as 'succeeded' several times in
+ ;; a row, for instance.
(if log-file
(sqlite-exec db "UPDATE Builds SET stoptime=?, status=?, log=? \
-WHERE derivation=?;"
- now status log-file drv)
+WHERE derivation=? AND status != ?;"
+ now status log-file drv status)
(sqlite-exec db "UPDATE Builds SET stoptime=?, status=? \
-WHERE derivation=?;"
- now status drv))))
+WHERE derivation=? AND status != ?;"
+ now status drv status))))
(define (db-get-outputs db build-id)
"Retrieve the OUTPUTS of the build identified by BUILD-ID in DB database."
diff --git a/tests/database.scm b/tests/database.scm
index 65a10a8..2382292 100644
--- a/tests/database.scm
+++ b/tests/database.scm
@@ -168,6 +168,11 @@ INSERT INTO Evaluations (specification, revision) VALUES (3, 3);")
(let ((status1 (get-status)))
(db-update-build-status! db "/foo.drv" (build-status succeeded)
#:log-file "/foo.drv.log")
+
+ ;; Second call shouldn't make any difference.
+ (db-update-build-status! db "/foo.drv" (build-status succeeded)
+ #:log-file "/foo.drv.log")
+
(let ((status2 (get-status))
(start (get-status #:starttime))
(end (get-status #:stoptime))