diff --git a/pollen/private/ts.rktd b/pollen/private/ts.rktd index 34a190e..165969e 100644 --- a/pollen/private/ts.rktd +++ b/pollen/private/ts.rktd @@ -1 +1 @@ -1615671175 +1616607395 diff --git a/pollen/render.rkt b/pollen/render.rkt index 17e83a3..615bb39 100644 --- a/pollen/render.rkt +++ b/pollen/render.rkt @@ -75,23 +75,23 @@ ;; initialize the workers (define worker-evts (for/list ([wpidx (in-range worker-count)]) - (define wp - (place ch - (let loop () - (match-define (list source-path output-path poly-target) - (place-channel-put/get ch (list 'wants-job))) - (parameterize ([current-poly-target poly-target]) - (place-channel-put/get ch (list 'wants-lock output-path)) - ;; trap any exceptions and pass them back as crashed jobs. - ;; otherwise, a crashed rendering place can't recover, and the parallel job will be stuck. - (with-handlers ([exn:fail? (λ (e) (place-channel-put ch (list 'crashed-job source-path output-path #f)))]) - (match-define-values (_ _ ms _) - ;; we don't use `render-to-file-if-needed` because we've already checked the render cache - ;; if we reached this point, we know we need a render - (time-apply render-to-file (list source-path #f output-path))) - (place-channel-put ch (list 'finished-job source-path output-path ms)))) - (loop)))) - (handle-evt wp (λ (val) (list* wpidx wp val))))) + (define wp + (place ch + (let loop () + (match-define (list source-path output-path poly-target) + (place-channel-put/get ch (list 'wants-job))) + (parameterize ([current-poly-target poly-target]) + (place-channel-put/get ch (list 'wants-lock output-path)) + ;; trap any exceptions and pass them back as crashed jobs. + ;; otherwise, a crashed rendering place can't recover, and the parallel job will be stuck. + (with-handlers ([exn:fail? (λ (e) (place-channel-put ch (list 'crashed-job source-path output-path #f)))]) + (match-define-values (_ _ ms _) + ;; we don't use `render-to-file-if-needed` because we've already checked the render cache + ;; if we reached this point, we know we need a render + (time-apply render-to-file (list source-path #f output-path))) + (place-channel-put ch (list 'finished-job source-path output-path ms)))) + (loop)))) + (handle-evt wp (λ (val) (list* wpidx wp val))))) (define poly-target (current-poly-target)) @@ -129,7 +129,7 @@ ;; crashed jobs are completed jobs that weren't finished (for/list ([jr (in-list completed-job-results)] #:unless ($jobresult-finished-successfully jr)) - ($jobresult-job jr))] + ($jobresult-job jr))] [else (match (apply sync worker-evts) [(list wpidx wp 'wants-job) @@ -197,16 +197,16 @@ [pairs (sort pairs pathcomplete-path path) [(? pagetree-source? pt) (loop (append (pagetree->paths pt) rest) sps ops)] [(app ->source-path sp) #:when (and sp (file-exists? sp)) - (define op (match path - [(== (->output-path path)) path] - [_ (->output-path sp)])) - (loop rest (cons sp sps) (cons op ops))] + (define op (match path + [(== (->output-path path)) path] + [_ (->output-path sp)])) + (loop rest (cons sp sps) (cons op ops))] [_ (loop rest sps ops)])]))) (cond [(null? all-jobs) (message "[no paths to render]")] @@ -259,7 +259,7 @@ [(not render-cache-activated?) 'render-cache-deactivated] [else #false])) (when render-needed? - (define render-thunk (or maybe-render-thunk (λ () (render source-path template-path output-path)))) ; returns either string or bytes + (define render-thunk (or maybe-render-thunk (λ () ((or (setup:external-renderer) render) source-path template-path output-path)))) ; returns either string or bytes (define render-result (cond [render-cache-activated? @@ -405,7 +405,7 @@ (define (file-exists-or-has-source? path) ; path could be #f (and path (for/first ([proc (in-list (list values ->preproc-source-path ->null-source-path))] #:when (file-exists? (proc path))) - path))) + path))) (define (get-template-from-metas source-path output-path-ext) (with-handlers ([exn:fail:contract? (λ (e) #f)]) ; in case source-path doesn't work with cached-require @@ -449,7 +449,7 @@ (for/or ([proc (list get-template-from-metas get-default-template get-fallback-template)]) - (file-exists-or-has-source? (proc source-path output-path-ext)))] + (file-exists-or-has-source? (proc source-path output-path-ext)))] [_ #false])) (if (current-session-interactive?) ;; don't cache templates in interactive session, for fresher reloads diff --git a/pollen/setup.rkt b/pollen/setup.rkt index e8166f4..51099a7 100644 --- a/pollen/setup.rkt +++ b/pollen/setup.rkt @@ -134,3 +134,5 @@ (define-settable index-pages '("index.html")) (define-settable allow-unbound-ids? #true) + +(define-settable external-renderer #false)