38 lines
1.2 KiB
Racket
38 lines
1.2 KiB
Racket
#lang racket
|
|
(require "scm.rkt"
|
|
"retry.rkt")
|
|
|
|
(define current-monitoring-interval-seconds
|
|
(make-parameter 60))
|
|
|
|
(define (monitor-scm repos start-rev notify-newer! notify-user!)
|
|
(define (monitor-w/o-wait prev-rev)
|
|
(define new-revs
|
|
(scm-revisions-after prev-rev repos))
|
|
(match new-revs
|
|
[(list)
|
|
; There has not yet been more revisions
|
|
(monitor prev-rev)]
|
|
[(cons new-rev newer)
|
|
(scm-update repos)
|
|
; Notify of newer ones
|
|
(notify-newer! newer)
|
|
; There was a commit that we care about. Notify, then recur
|
|
(retry-until-success
|
|
(format "Notifying of revision ~a" new-rev)
|
|
(notify-user! prev-rev new-rev))
|
|
(monitor new-rev)]))
|
|
(define (monitor prev-rev)
|
|
(sleep (current-monitoring-interval-seconds))
|
|
(monitor-w/o-wait prev-rev))
|
|
(monitor-w/o-wait start-rev))
|
|
|
|
(provide/contract
|
|
[current-monitoring-interval-seconds
|
|
(parameter/c exact-nonnegative-integer?)]
|
|
[monitor-scm
|
|
(path-string? exact-nonnegative-integer?
|
|
((listof exact-nonnegative-integer?) . -> . void)
|
|
(exact-nonnegative-integer? exact-nonnegative-integer? . -> . void)
|
|
. -> . any)])
|