debbugs: Add forgotten-bug-numbers.
authorRicardo Wurmus <rekado@elephly.net>
Sun, 10 May 2020 09:16:51 +0000 (11:16 +0200)
committerRicardo Wurmus <rekado@elephly.net>
Sun, 10 May 2020 09:22:16 +0000 (11:22 +0200)
mumi/debbugs.scm

index 584665dfc4f479d5d7c72450e12d1a8630501f34..086e89a63fe884935a82721b5e93bc0640f0c98e 100644 (file)
 
 (define-module (mumi debbugs)
   #:use-module (mumi config)
+  #:use-module (debbugs cache)
   #:use-module (email email)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
+  #:use-module (srfi srfi-19)
   #:use-module (ice-9 match)
   #:use-module (ice-9 rdelim)
   #:export (read-emails-from-bug-log
             extract-bug-numbers
+            forgotten-bug-numbers
             bug-id->log-file))
 
 (define* (read-emails-from-bug-log port
@@ -146,6 +149,32 @@ of archived issues."
                   (second (string-split line #\space)))
                 #:archived? archived?))
 
+(define* (forgotten-bug-numbers packages #:key (seconds-ago (* 60 60 24 30)))
+  "Return the numbers of issues that are open but haven't seen any
+activity for a while.  The duration is given by SECONDS-AGO, which
+defaults to 30 days."
+  (define threshold
+    (number->string
+     (time-second
+      (subtract-duration (current-time)
+                         (make-time time-duration 0 seconds-ago)))))
+  (define cache-key
+    (list 'forgotten-bug-numbers packages seconds-ago))
+  (define cached (cached? cache-key))
+  (or cached
+      (let ((result
+             (filter-index (lambda (line)
+                             (any (lambda (package)
+                                    (and (string-prefix? package line)
+                                         (let ((fields (string-split line #\space)))
+                                           (and (string=? "open" (fourth fields))
+                                                (string< (third fields) threshold)))))
+                                  packages))
+                           (lambda (line)
+                             (second (string-split line #\space))))))
+        (cache! cache-key result)
+        result)))
+
 (define* (bug-id->log-file bug-id #:key archived?)
   (format #f "~a/spool/~a/~a/~a.log"
           (%config 'data-dir)