aboutsummaryrefslogtreecommitdiff
path: root/src/data
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2021-05-17 14:18:39 -0700
committerSean Whitton <spwhitton@spwhitton.name>2021-05-17 17:01:18 -0700
commitb2fbc36eedd14e0eb6c012554810a5b75a2e015a (patch)
tree3d9fe6165981c183d146e1edc375f95b7c3dea81 /src/data
parent3525237f97a3d01ee7d600e6441b520951e874b9 (diff)
downloadconsfigurator-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.lisp26
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))))