diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2021-05-17 14:18:39 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2021-05-17 17:01:18 -0700 |
commit | b2fbc36eedd14e0eb6c012554810a5b75a2e015a (patch) | |
tree | 3d9fe6165981c183d146e1edc375f95b7c3dea81 /src/data | |
parent | 3525237f97a3d01ee7d600e6441b520951e874b9 (diff) | |
download | consfigurator-b2fbc36eedd14e0eb6c012554810a5b75a2e015a.tar.gz |
separately upload, compile and load each ASDF system
This avoids recompiling unchanged systems on every deploy, which makes for a
decent performance boost, especially on systems with less processing power.
Drop the idea of relying on distribution packages on the remote side -- we
want to use the same version of the source as is running in the root Lisp.
Signed-off-by: Sean Whitton <spwhitton@spwhitton.name>
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/asdf.lisp | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/src/data/asdf.lisp b/src/data/asdf.lisp index 5db7c7a..a681bb1 100644 --- a/src/data/asdf.lisp +++ b/src/data/asdf.lisp @@ -18,33 +18,27 @@ (in-package :consfigurator.data.asdf) (named-readtables:in-readtable :consfigurator) -;; could we have both :asdf-monolithic and :asdf-something_else where in the -;; latter we filter out the names of systems already known to be available on -;; the remote side, so those don't need to be uploaded? for example, the -;; :sbcl connection type can try to install them with apt on the remote side, -;; then ask asdf for a concatenated source for everything excluding those. if -;; asdf can't be asked to do that, maybe we can ask it to produce one file per -;; system, and then we eliminate those we don't want and concatenate the -;; result ourselves. maybe we can create a fake system object based on the -;; real one, remove some deps from it according to a known mapping of systems -;; to Debian package names, then ask asdf to concatenate that system - (defmethod register-data-source ((type (eql :asdf)) &key) (cons #'asdf-data-source-check #'get-path-to-concatenated-system)) (defun asdf-data-source-check (iden1 system) - (when (and (string= iden1 "--lisp-system") - (asdf:find-system system nil)) - (get-universal-time))) + (let ((system (and (string= iden1 "--lisp-system") + (asdf:find-system system nil)))) + (and system (system-version system)))) (defun get-path-to-concatenated-system (iden1 system) "Try to concatenate all the source code for SYSTEM, store it somewhere and return the filename." - (let ((op 'asdf:monolithic-concatenate-source-op) + (let ((op 'asdf:concatenate-source-op) (co (asdf:find-component system nil))) (asdf:operate op co) (make-instance 'file-data :file (asdf:output-file op co) :mime "text/plain" :iden1 iden1 :iden2 system - :version (get-universal-time)))) + :version (system-version co)))) + +(defun system-version (system) + (reduce #'max + (mapcar #'file-write-date + (asdf:input-files 'asdf:concatenate-source-op system)))) |