aboutsummaryrefslogtreecommitdiff
path: root/nar-herder/database.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2022-02-15 09:03:50 +0000
committerChristopher Baines <mail@cbaines.net>2022-02-15 09:03:50 +0000
commitf69da3686583d53974e720a9e66103126631cb69 (patch)
tree8df2a333e907feb92e7dd463d489b473d2e0af4b /nar-herder/database.scm
parentb0263314f56cc6558e4941f64c89d9fd85aaa260 (diff)
downloadnar-herder-f69da3686583d53974e720a9e66103126631cb69.tar
nar-herder-f69da3686583d53974e720a9e66103126631cb69.tar.gz
Keep the change datetimes consistent when mirroring
As this ensures that changes aren't missed when the mirror inserts things later than the origin.
Diffstat (limited to 'nar-herder/database.scm')
-rw-r--r--nar-herder/database.scm27
1 files changed, 25 insertions, 2 deletions
diff --git a/nar-herder/database.scm b/nar-herder/database.scm
index e30c82a..e8c8b8d 100644
--- a/nar-herder/database.scm
+++ b/nar-herder/database.scm
@@ -324,7 +324,8 @@ PRAGMA optimize;")))
id)))
-(define (database-insert-narinfo database narinfo)
+(define* (database-insert-narinfo database narinfo
+ #:key change-datetime)
(define (insert-narinfo-record db)
(let ((statement
(sqlite-prepare
@@ -408,6 +409,25 @@ INSERT INTO recent_changes (
(sqlite-step statement)
(sqlite-reset statement)))
+ (define (insert-change-with-datetime db contents datetime)
+ (let ((statement
+ (sqlite-prepare
+ db
+ "
+INSERT INTO recent_changes (
+ datetime, change, data
+) VALUES (
+ :datetime, 'addition', :contents
+)"
+ #:cache? #t)))
+ (sqlite-bind-arguments
+ statement
+ #:contents contents
+ #:datetime datetime)
+
+ (sqlite-step statement)
+ (sqlite-reset statement)))
+
(database-call-with-transaction
database
(lambda (db)
@@ -426,7 +446,10 @@ INSERT INTO recent_changes (
(make-list (length references) narinfo-id)
references))
- (insert-change db (narinfo-contents narinfo))
+ (if change-datetime
+ (insert-change-with-datetime db (narinfo-contents narinfo)
+ change-datetime)
+ (insert-change db (narinfo-contents narinfo)))
narinfo-id))))