racket/collects/meta/drdr/monitor-svn.ss
Jay McCarthy 25e403156a Adding DrDr source to meta.
svn: r18315
2010-02-24 04:07:08 +00:00

41 lines
1.3 KiB
Scheme

#lang scheme
(require "svn.ss"
"retry.ss")
(define current-monitoring-interval-seconds
(make-parameter 60))
(define (monitor-svn repos start-rev notify-newer! notify-user!)
(define (monitor-w/o-wait prev-rev)
(define all-logs
(svn-revision-logs-after prev-rev repos))
(define new-logs
(filter-not
(lambda (l) (= (svn-rev-log-num l) prev-rev))
all-logs))
(match new-logs
[(list)
; There has not yet been more revisions
(monitor prev-rev)]
[(cons log newer)
(define new-rev (svn-rev-log-num log))
; 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 log))
(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-svn
(string? exact-nonnegative-integer?
((listof svn-rev-log?) . -> . void)
(exact-nonnegative-integer? exact-nonnegative-integer? svn-rev-log? . -> . void)
. -> . any)])