aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathieu Lirzin <mthl@gnu.org>2016-07-26 00:36:12 +0200
committerMathieu Lirzin <mthl@gnu.org>2016-07-26 00:36:12 +0200
commitc83d5d4da84d31e1c05e6e5d77c7f78fa4a38ad9 (patch)
treefa43aed3b470a151e4fef963657e22a010d56d89 /src
parente51a755f10ac7a093d85fb6f8868c33a046cc9ab (diff)
downloadcuirass-c83d5d4da84d31e1c05e6e5d77c7f78fa4a38ad9.tar
cuirass-c83d5d4da84d31e1c05e6e5d77c7f78fa4a38ad9.tar.gz
Use stamps to poll repositories.
Diffstat (limited to 'src')
-rw-r--r--src/cuirass/database.scm22
-rw-r--r--src/schema.sql6
2 files changed, 28 insertions, 0 deletions
diff --git a/src/cuirass/database.scm b/src/cuirass/database.scm
index 3b8ffb9..dbbe00a 100644
--- a/src/cuirass/database.scm
+++ b/src/cuirass/database.scm
@@ -29,6 +29,8 @@
db-close
db-add-specification
db-get-specifications
+ db-add-stamp
+ db-get-stamp
evaluation-exists?
db-add-evaluation
db-get-evaluation
@@ -188,3 +190,23 @@ INSERT INTO Builds (derivation, log, output) VALUES ('~A', '~A', '~A');"
(assq-ref build #:log)
(assq-ref build #:output))
(last-insert-rowid db))
+
+(define (db-get-stamp db spec)
+ "Return a stamp corresponding to specification SPEC in database DB."
+ (let ((res (sqlite-exec db "SELECT * FROM Stamps WHERE specification='~A';"
+ (assq-ref spec #:id))))
+ (match res
+ (() "")
+ ((#(spec commit)) commit))))
+
+(define (db-add-stamp db spec commit)
+ "Associate stamp COMMIT to specification SPEC in database DB."
+ (if (string-null? (db-get-stamp db spec))
+ (sqlite-exec db "\
+INSERT INTO Stamps (specification, stamp) VALUES ('~A', '~A');"
+ (assq-ref spec #:id)
+ commit)
+ (sqlite-exec db "\
+UPDATE Stamps SET stamp='~A' WHERE specification='~A';"
+ commit
+ (assq-ref spec #:id))))
diff --git a/src/schema.sql b/src/schema.sql
index 9cc7167..d5c1f00 100644
--- a/src/schema.sql
+++ b/src/schema.sql
@@ -14,6 +14,12 @@ CREATE TABLE Specifications (
revision TEXT
);
+CREATE TABLE Stamps (
+ specification INTEGER NOT NULL PRIMARY KEY,
+ stamp TEXT NOT NULL,
+ FOREIGN KEY (specification) REFERENCES Specifications (id)
+);
+
CREATE TABLE Evaluations (
derivation TEXT NOT NULL PRIMARY KEY,
job_name TEXT NOT NULL,