debbugs: Add filter-index.
authorRicardo Wurmus <rekado@elephly.net>
Sun, 10 May 2020 08:25:23 +0000 (10:25 +0200)
committerRicardo Wurmus <rekado@elephly.net>
Sun, 10 May 2020 08:25:23 +0000 (10:25 +0200)
* mumi/debbugs.scm (filter-index): New procedure.

mumi/debbugs.scm

index 7873c863bb59adfa8506790d1248fd45a85d1502..d50012799739e59f9ab34a20a00b447b9edec5d1 100644 (file)
@@ -116,6 +116,24 @@ ends with ^C.
                  (loop msgids mails lines type skip?)
                  (loop msgids mails (cons line lines) type skip?))))))))
 
+(define* (filter-index pred proc #:key archived?)
+  "Open up a Debbugs index file and collect the result of applying
+PROC to those lines that match the predicate PRED.  If ARCHIVED? is #T
+search the index of archived issues."
+  (define index-file
+    (format #f "~a/spool/index.~a.realtime" (%config 'data-dir)
+            (if archived? "archive" "db")))
+  (call-with-input-file index-file
+    (lambda (port)
+      (let loop ((result '()))
+        (match (read-line port)
+          ((? eof-object? x) result)
+          (line
+           (cond
+            ((pred line)
+             (loop (cons (proc line) result)))
+            (else (loop result)))))))))
+
 (define* (extract-bug-numbers packages #:key archived?)
   "Open up a Debbugs index file and return the bug numbers for those
 lines that match one of PACKAGES.  If ARCHIVED? is #T search the index