2009/5/12 Robert Goldman rpgoldman@sift.info:
I agree. There are probably two items here:
- Allowing a system definer to say "don't descend into this sub-system"
even when :force is t.
Instead of (or in addition to) #1 I think there is call for a way to user (or sysadmin, etc) say "don't recompile these systems".
Consider a shared installation of lisp libraries under /usr/local/asdf/:
(defvar *ro-systems* (directory "/usr/local/lib/asdf/*.asd"))
(defmethod traverse :before ((o compile-op) (s system)) (when (and (operation-forced o) (member (system-definition-pathname s) *ro-systems* :test #'equal)) (warn "Ignoring :FORCE T for COMPILE-OP of system installed in ~ /usr/local/asdf/: ~:@(~A~)." (component-name c)) (setf (operation-forced o) nil)))
For #1, I'd suggest adding a slot to system that controls how force behaves. Ideas include
* read-only (to mean that the system cannot be edited or recompiled.) * ignore-force (to mean, well, ignore force).
I think both of these are fairly limited in scope: libraries installed along with lisp implementations and libraries which break horribly upon recompilation seem like the only ones which should use these, and in in case of implementations installing 3rd-party libraries they should not really be editing the system -- so a protocol extensions seems necessary even in the presence of these options / slots.
For #2, I'd suggest using
- recompile everything
* :force t * :force :descend
- recompile only the current system
* :force :system-only
Should there be a way for user to say "reload everything despite the timestamps, but don't recompile anything"?
Cheers,
-- Nikodemus