dotfiles/sbcl/.quicklisp/quicklisp/fetch-gzipped.lisp
2020-01-20 14:13:08 -05:00

29 lines
887 B
Common Lisp

;;;; fetch-gzipped.lisp
(in-package #:quicklisp-client)
(defun gzipped-url (url)
(check-type url string)
(concatenate 'string url ".gz"))
(defun fetch-gzipped-version (url file &key quietly)
(let ((gzipped (gzipped-url url))
(gzipped-temp (merge-pathnames "gzipped.tmp" file)))
(fetch gzipped gzipped-temp :quietly quietly)
(gunzip gzipped-temp file)
(delete-file-if-exists gzipped-temp)
(probe-file file)))
(defun url-not-suitable-error-p (condition)
(<= 400 (unexpected-http-status-code condition) 499))
(defun maybe-fetch-gzipped (url file &key quietly)
(handler-case
(fetch-gzipped-version url file :quietly quietly)
(unexpected-http-status (condition)
(cond ((url-not-suitable-error-p condition)
(fetch url file :quietly quietly)
(probe-file file))
(t
(error condition))))))