refactoring by skill
This commit is contained in:
+39
-39
@@ -39,9 +39,9 @@
|
||||
"https://cdn.jsdelivr.net/npm/diff2html@3.4.56/bundles/css/diff2html.min.css")))
|
||||
|
||||
(define (vendor-file-ready? config name)
|
||||
(define path (build-path (vendor-directory config) name))
|
||||
(and (file-exists? path)
|
||||
(> (file-size path) 0)))
|
||||
(let ((path (build-path (vendor-directory config) name)))
|
||||
(and (file-exists? path)
|
||||
(> (file-size path) 0))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; goal : Check whether all required browser libraries are installed.
|
||||
@@ -56,40 +56,40 @@
|
||||
|
||||
(define (download-content source)
|
||||
(parameterize ((current-https-protocol 'secure))
|
||||
(define-values (in headers)
|
||||
(get-pure-port/headers (string->url source)
|
||||
'()
|
||||
#:redirections 5
|
||||
#:status? #t))
|
||||
(dynamic-wind
|
||||
void
|
||||
(λ ()
|
||||
(define status-match
|
||||
(regexp-match #px"^HTTP/[^ ]+ ([0-9][0-9][0-9])" headers))
|
||||
(unless (and status-match
|
||||
(= (string->number (list-ref status-match 1)) 200))
|
||||
(error 'download-vendor-files!
|
||||
"download failed for ~a: ~a"
|
||||
source
|
||||
(or (and status-match (list-ref status-match 1))
|
||||
"invalid HTTP status")))
|
||||
(port->bytes in))
|
||||
(λ ()
|
||||
(close-input-port in)))))
|
||||
(let-values (((in headers)
|
||||
(get-pure-port/headers (string->url source)
|
||||
'()
|
||||
#:redirections 5
|
||||
#:status? #t)))
|
||||
(dynamic-wind
|
||||
void
|
||||
(λ ()
|
||||
(let ((status-match
|
||||
(regexp-match #px"^HTTP/[^ ]+ ([0-9][0-9][0-9])" headers)))
|
||||
(unless (and status-match
|
||||
(= (string->number (list-ref status-match 1)) 200))
|
||||
(error 'download-vendor-files!
|
||||
"download failed for ~a: ~a"
|
||||
source
|
||||
(or (and status-match (list-ref status-match 1))
|
||||
"invalid HTTP status")))
|
||||
(port->bytes in)))
|
||||
(λ ()
|
||||
(close-input-port in))))))
|
||||
|
||||
(define (download-file! config name source)
|
||||
(define directory (vendor-directory config))
|
||||
(define target (build-path directory name))
|
||||
(define temporary-target
|
||||
(build-path directory (string-append name ".download")))
|
||||
(define content (download-content source))
|
||||
(make-directory* (path-only target))
|
||||
(call-with-output-file temporary-target
|
||||
(λ (out)
|
||||
(write-bytes content out))
|
||||
#:exists 'truncate/replace)
|
||||
(rename-file-or-directory temporary-target target #t)
|
||||
(void))
|
||||
(let* ((directory (vendor-directory config))
|
||||
(target (build-path directory name))
|
||||
(temporary-target
|
||||
(build-path directory (string-append name ".download")))
|
||||
(content (download-content source)))
|
||||
(make-directory* (path-only target))
|
||||
(call-with-output-file temporary-target
|
||||
(λ (out)
|
||||
(write-bytes content out))
|
||||
#:exists 'truncate/replace)
|
||||
(rename-file-or-directory temporary-target target #t)
|
||||
(void)))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; goal : Download all browser libraries required by the wiki frontend.
|
||||
@@ -101,10 +101,10 @@
|
||||
(define (download-vendor-files! config)
|
||||
(make-directory* (vendor-directory config))
|
||||
(for ([entry (in-list vendor-files)])
|
||||
(define name (car entry))
|
||||
(define source (cdr entry))
|
||||
(unless (vendor-file-ready? config name)
|
||||
(download-file! config name source)))
|
||||
(let ((name (car entry))
|
||||
(source (cdr entry)))
|
||||
(unless (vendor-file-ready? config name)
|
||||
(download-file! config name source))))
|
||||
(unless (vendor-files-ready? config)
|
||||
(error 'download-vendor-files! "frontend vendor setup is incomplete"))
|
||||
(void))
|
||||
|
||||
Reference in New Issue
Block a user