racket-pkg-website/src/signals.rkt
2014-11-09 17:20:44 -05:00

37 lines
1.2 KiB
Racket

#lang racket/base
;; Watching for control signals from the outside (Unix) environment
(provide poll-signal
start-restart-signal-watcher)
(require "reload.rkt")
(define (poll-signal signal-file-name message handler)
(when (file-exists? signal-file-name)
(log-info message)
(delete-file signal-file-name)
(handler)))
(define (start-restart-signal-watcher)
(thread
(lambda ()
(let loop ()
(flush-output) ;; Somewhat gratuitous; help ensure timely stdout logging
(poll-signal "../signals/.pull-required"
"Pull signal received"
(lambda ()
(local-require racket/system)
(system "git pull")
(exit 0)))
(poll-signal "../signals/.restart-required"
"Restart signal received - attempting to restart"
(lambda () (exit 0)))
(poll-signal "../signals/.reload"
"Reload signal received - attempting to reload code"
(lambda () (reload!)))
(poll-signal "../signals/.fetchindex"
"Index refresh signal received"
(lambda () ((entry-point-value (lookup-entry-point 'refresh-packages!)))))
(sleep 0.5)
(loop)))))