commit 55b507cdf8d001930076bc350e0a2956383ac6d4
parent 565d4f8e09e8822a2a53661cb2b835ecc1811f1e
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date: Wed, 13 May 2026 17:59:14 +0000
Feed comparison primitives are shared
Diffstat:
2 files changed, 41 insertions(+), 38 deletions(-)
diff --git a/src/common.scm b/src/common.scm
@@ -254,3 +254,44 @@
(sql/transient db (string-append "SELECT id,url,type,description,
notes,ptime,ctime,mtime
FROM entry " selector ";"))))
+
+;;;;;;;;;;;;;;;;;;;
+;; Feed Utilities
+
+(define (build-signature selector)
+ (query fetch-rows
+ (sql db (string-append "SELECT id,mtime FROM entry " selector ";"))))
+
+(define (car< a b) (< (car a) (car b)))
+
+(define (diff-signature old-sig new-sig)
+ (let loop ((old (sort old-sig car<))
+ (new (sort new-sig car<))
+ (result '()))
+ (cond ((and (null? old) (null? new))
+ result)
+ ((null? old)
+ (loop old
+ (cdr new)
+ (cons `(add ,@(car new)) result)))
+ ((null? new)
+ (loop (cdr old)
+ new
+ (cons `(del ,@(car old)) result)))
+ ((equal? (car new) (car old))
+ (loop (cdr old)
+ (cdr new)
+ result))
+ ((= (caar new) (caar old))
+ (loop (cdr old)
+ (cdr new)
+ (cons `(chg ,@(car old) ,(cadar new)) result)))
+ ((< (caar new) (caar old))
+ (loop old
+ (cdr new)
+ (cons `(add ,@(car new)) result)))
+ ((> (caar new) (caar old))
+ (loop (cdr old)
+ new
+ (cons `(del ,@(car old)) result)))
+ (else (assert #f "Should be unreachable")))))
diff --git a/src/iens.scm b/src/iens.scm
@@ -261,44 +261,6 @@
;; Feed Caching
-(define (build-signature selector)
- (query fetch-rows
- (sql db (string-append "SELECT id,mtime FROM entry " selector ";"))))
-
-(define (car< a b) (< (car a) (car b)))
-
-(define (diff-signature old-sig new-sig)
- (let loop ((old (sort old-sig car<))
- (new (sort new-sig car<))
- (result '()))
- (cond ((and (null? old) (null? new))
- result)
- ((null? old)
- (loop old
- (cdr new)
- (cons `(add ,@(car new)) result)))
- ((null? new)
- (loop (cdr old)
- new
- (cons `(del ,@(car old)) result)))
- ((equal? (car new) (car old))
- (loop (cdr old)
- (cdr new)
- result))
- ((= (caar new) (caar old))
- (loop (cdr old)
- (cdr new)
- (cons `(chg ,@(car old) ,(cadar new)) result)))
- ((< (caar new) (caar old))
- (loop old
- (cdr new)
- (cons `(add ,@(car new)) result)))
- ((> (caar new) (caar old))
- (loop (cdr old)
- new
- (cons `(del ,@(car old)) result)))
- (else (assert #f "Should be unreachable")))))
-
(define (write-diff sig-diff)
(for-each
(lambda (hunk)