55 lines
1.9 KiB
Scheme
55 lines
1.9 KiB
Scheme
(use-modules
|
|
(ice-9 filesystem)
|
|
(logging logger)
|
|
(srfi srfi-9)
|
|
(ordo connection)
|
|
(ordo interceptor)
|
|
(ordo logger))
|
|
|
|
(define-record-type <play>
|
|
(make-play name connection vars interceptors)
|
|
play?
|
|
(connection play-connection)
|
|
(vars play-vars)
|
|
(name play-name)
|
|
(interceptors play-interceptors))
|
|
|
|
(define* (play #:key name connection (interceptors '()) (vars '()))
|
|
(make-play name connection vars interceptors))
|
|
|
|
(define (run-play play)
|
|
(dynamic-wind
|
|
(lambda ()
|
|
(log-msg 'NOTICE "Running play: " (play-name play))
|
|
(init-connection! (play-connection play)))
|
|
(lambda ()
|
|
(let ((ctx (init-context (play-connection play) #:vars (play-vars play))))
|
|
(execute ctx (play-interceptors play))
|
|
(if (context-error ctx)
|
|
(log-msg 'ERROR "Play " (play-name play) " terminated with error: " (context-error ctx))
|
|
(log-msg 'NOTICE "Completed play: " (play-name play)))))
|
|
(lambda ()
|
|
(close-connection! (play-connection play)))))
|
|
|
|
(define test-play
|
|
(play
|
|
#:name "Test play"
|
|
#:connection (local-connection)
|
|
#:vars '((base-dir . "/home/ray/ordo-test"))
|
|
#:interceptors (list
|
|
(interceptor
|
|
"Handle errors"
|
|
#:error (lambda (ctx err)
|
|
(log-msg 'WARN "Handling error " err)
|
|
(set-context-error! ctx #f)))
|
|
(interceptor
|
|
"Create base directory"
|
|
#:enter (lambda (ctx)
|
|
(must ctx "mkdir" "-p" (unbind ctx base-dir))))
|
|
(interceptor
|
|
"Create test file"
|
|
#:enter (lambda (ctx)
|
|
(must ctx "touch" (file-name-join* (unbind ctx base-dir) "test-file"))))
|
|
(interceptor
|
|
"Throw an error"
|
|
#:enter (lambda (ctx) (error "badness"))))))
|