racket/collects/meta/drdr/monitor-scm.rkt
2011-11-01 11:16:47 -06:00

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)])