guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Ludovic Courtès
Date: Thu, 8 Feb 2018 08:25:54 -0500 (EST)

branch: master
commit 2887b1dfa914f804607535d80f57bca34d4888fa
Author: Ludovic Courtès <address@hidden>
Date:   Thu Feb 8 11:59:42 2018 +0100

    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!'.
---
 src/cuirass/database.scm | 13 +++++++++----
 tests/database.scm       |  5 +++++
 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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]