On Sun, May 2, 2010 at 12:59 AM, Faré fahree@gmail.com wrote:
Works for me on ASDF.
For load-op and compile-op, times are stored in the operation-times slot of the component, as accessed by component-operation-times. Load-source-op should be doing the same, really. I've just added a method component-operation-time that allows one to do the Right Thing(tm) whatever that right thing is. Maybe we want load-source-op and load-op to share a same time, for instance.
If ABCL is doing the wrong thing, I suggest that you TRACE operation-done-p and/or safe-file-write-date and see what it tells you.
I'm attaching two subsequent calls to (swank:operate-on-system-for-emacs "owl2" (quote load-op)) with tracing of perform and the two functions you mention. I haven't touched any files in between, but you will notice the same set of .abcls are loaded in both cases. Also attaching asd file. I'm not sure where the locus of the problem is, but one way or another it's a regression from abcl/asdf1.
-Alan
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] Death is only a milestone - albeit one that is dropped on you from a very great height — Terry Pratchett.
On 2 May 2010 00:17, Alan Ruttenberg alanruttenberg@gmail.com wrote:
Situation:
abcl there is a newer compiled file than source file calling load-op on the system with this file causes the fasl to be repeatedly loaded.
The reason, it appears:
(defmethod perform ((o load-op) (c cl-source-file)) #-ecl (mapcar #'load (input-files o c)) #+ecl (loop :for i :in (input-files o c) :unless (string= (pathname-type i) "fas") :collect (let ((output (compile-file-pathname (lispize-pathname i)))) (load output))))
compared to
(defmethod perform ((o load-source-op) (c cl-source-file)) (let ((source (component-pathname c))) (setf (component-property c 'last-loaded-as-source) (and (load source) (get-universal-time)))))
i.e. the last loaded-time is recorded only when the source is loaded.
-Alan