From: Larry Clapp
Subject: Stupid ASDF tricks -- recovering from hardlinking instead of symlinking the .asd file
Date:
Message-ID: <slrnf6t3pj.caa.larry@theclapp.ddts.net>
Yesterday I accidentally hardlinked an .asd into my asdf
*central-registry*, and then tried to load-op the system, which of
course failed.
When I deleted the hardlink and changed it to a symlink, load-op
continued to fail.
I believe (and I could be wrong) asdf loaded the .asd file, decided
that the source was in the *central-registry* directory, and looked
for it there forever after.
How do you get asdf to reprocess the asd file and/or its new location?
Load-op doesn't do it.
... Before posting, I did a couple more searches, and found the answer
(here[1]), and I suppose it should have occurred to me last night. Oh
well. I'll go ahead and post the answer for posterity.
Simply reload the .asd file directly:
The error:
> CL-USER 1 > (asdf:operate 'asdf:load-op 'puri)
> ; loading system definition from /home/lmc/lisp/systems/puri.asd into
> ; #<The ASDF0 package, 0/16 internal, 0/16 external>
> ; Loading text file /big2/home/lmc/lisp/systems/puri.asd
> ; registering #<SYSTEM PURI 218A4A17> as PURI
> ; registering #<SYSTEM PURI-TESTS 21895317> as PURI-TESTS
> ;;; Compiling file /big2/home/lmc/lisp/systems/src.lisp ...
[snip various messages]
>
> Error: The file #P"/big2/home/lmc/lisp/systems/src.lisp" does not exist.
> 1 (continue) Try opening #P"/big2/home/lmc/lisp/systems/src.lisp" again.
> 2 Try compiling /big2/home/lmc/lisp/systems/src.lisp again.
> 3 Skip compiling /big2/home/lmc/lisp/systems/src.lisp.
> 4 Retry performing #<ASDF:COMPILE-OP NIL 200A1DA7> on
> #<ASDF:CL-SOURCE-FILE "src" 2189C71F>.
> 5 Continue, treating #<ASDF:COMPILE-OP NIL 200A1DA7> on
> #<ASDF:CL-SOURCE-FILE "src" 2189C71F> as having been successful.
> 6 (abort) Return to level 0.
> 7 Return to top loop level 0.
>
> Type :b for backtrace, :c <option number> to proceed, or :? for
> other options
>
> CL-USER 2 : 1 > :top
The fix (run from the registry directory):
> ln -fs ../puri-1.5.1/puri.asd .
The recovery:
> CL-USER 3 > (load "lisp/systems/puri.asd")
> ; Loading text file /big2/home/lmc/lisp/puri-1.5.1/puri.asd
[snip some warnings about methods redefined]
> #P"/big2/home/lmc/lisp/puri-1.5.1/puri.asd"
>
> CL-USER 4 > (asdf:operate 'asdf:load-op 'puri)
> ; Loading fasl file /big2/home/lmc/lisp/puri-1.5.1/src.ufasl
> NIL
>
> CL-USER 5 >
It just goes to show, when all else fails, read the directions.
-- Larry
[1] http://constantly.at/lisp/asdf/The-defsystem-grammar.html, at the
bottom, the part about "If a system is being redefined ..."