Just a question for understanding this better: CLOS provides clean ways to update methods with newer versions. Why do you use fmakunbound instead? Is this to stay backwards-compatible? Would it be a good idea to switch to a CLOS-based solution in the future to prevent such problems?
I'm probably missing something… Thanks, Pascal On 6 Feb 2013, at 12:42, Faré <[email protected]> wrote: > Dear Robert, > > it looks like the issue is that you loaded your methods > to extend ASDF before upgrading ASDF itself, which won't work. > Upgrading ASDF includes a FMAKUNBOUND on several functions, > including PERFORM, which indeed UNTRACE's them on many implementations. > > ASDF 3 will always try to upgrade itself before any operation, > precisely to avoid squashing your methods in the middle of the operation, > which would be far worse. > But if it was already upgraded, this should be a No-Op > (unless there's a bug in ASDF). > Moreover, :force t should not apply to ASDF, > because it has the :builtin-system-p t flag. > I just tried at home, and it worked. > > Considering that you seem to already have had ASDF 3 installed > (since it did the automatic upgrade attempt), > the issue seems to be that you git pull'ed > after loading your ASDF overrides, and they thus got squashed > during the implicit ASDF upgrade. > > —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org > Money doesn't change men, it merely unmasks them. If a man is naturally > selfish > or arrogant or greedy, the money brings that out, that's all. — Henry Ford > > > On Wed, Feb 6, 2013 at 1:41 AM, Robert Goldman <[email protected]> wrote: >> I was having a case where some package wrangling in one of our systems >> behaved >> differently with new ASDF than with the ASDF 2 that ships with ACL. >> >> It seemed like there was an :AFTER method on one of my modules that simply >> wasn't being called. >> >> I took my usual resort and did >> >> (TRACE ASDF:PERFORM). >> >> I was very surprised to see that my >> >> (asdf:load-system "circa-csm" :force t) >> >> resulted in only four calls to perform, and all of them had to do with ASDF: >> >> CL-USER> (asdf:load-system "circa-csm" :force t) >> ; Loading /Users/rpg/lisp/asdf/asdf.asd >> ; Loading /Users/rpg/lisp/asdf/asdf-driver.asd >> 0[7]: (ASDF/ACTION:PERFORM #<ASDF/LISP-ACTION:PREPARE-OP > >> #<ASDF/SYSTEM:SYSTEM "asdf">) >> 0* (MULTIPLE-VALUE-PROG1 (PROGN #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> :BEFORE >> (ASDF/OPERATION:OPERATION >> ASDF/COMPONENT:COMPONENT)> >> #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> (ASDF/LISP-ACTION:PREPARE-OP >> ASDF/COMPONENT:COMPONENT)>) >> #<STANDARD-METHOD ASDF/ACTION:PERFORM :AFTER >> (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)>) >> 0[7]: returned NIL >> 0[7]: (ASDF/ACTION:PERFORM #<ASDF/LISP-ACTION:PREPARE-OP > >> #<ASDF/COMPONENT:MODULE "asdf" "build">) >> 0* (MULTIPLE-VALUE-PROG1 (PROGN #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> :BEFORE >> (ASDF/OPERATION:OPERATION >> ASDF/COMPONENT:COMPONENT)> >> #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> (ASDF/LISP-ACTION:PREPARE-OP >> ASDF/COMPONENT:COMPONENT)>) >> #<STANDARD-METHOD ASDF/ACTION:PERFORM :AFTER >> (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)>) >> 0[7]: returned NIL >> 0[7]: (ASDF/ACTION:PERFORM #<ASDF/LISP-ACTION:PREPARE-OP > >> #<ASDF/LISP-ACTION:CL-SOURCE-FILE >> "asdf" "build" "asdf">) >> 0* (MULTIPLE-VALUE-PROG1 (PROGN #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> :BEFORE >> (ASDF/OPERATION:OPERATION >> ASDF/COMPONENT:COMPONENT)> >> #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> (ASDF/LISP-ACTION:PREPARE-OP >> ASDF/COMPONENT:COMPONENT)>) >> #<STANDARD-METHOD ASDF/ACTION:PERFORM :AFTER >> (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)>) >> 0[7]: returned NIL >> 0[7]: (ASDF/ACTION:PERFORM #<ASDF/LISP-ACTION:LOAD-OP > >> #<ASDF/LISP-ACTION:CL-SOURCE-FILE >> "asdf" "build" "asdf">) >> 0* (MULTIPLE-VALUE-PROG1 (PROGN #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> :BEFORE >> (ASDF/OPERATION:OPERATION >> ASDF/COMPONENT:COMPONENT)> >> #<STANDARD-METHOD >> ASDF/ACTION:PERFORM >> (ASDF/LISP-ACTION:LOAD-OP >> ASDF/LISP-ACTION:CL-SOURCE-FILE)>) >> #<STANDARD-METHOD ASDF/ACTION:PERFORM :AFTER >> (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)>) >> ; Fast loading >> ; >> /Users/rpg/.cache/common-lisp/acl-8.2-macosx-x64/Users/rpg/lisp/asdf/build/asdf.fasl >> 0[7]: returned T >> >> ;;; from here on down there's lots of loading, but no recompilation (as I >> ;;; expected from :force t) and no calls to PERFORM. >> ; Fast loading >> ; >> /Users/rpg/.cache/common-lisp/acl-8.2-macosx-x64/Users/rpg/circa/code/csm/musliner-tools.fasl >> ; Fast loading >> ; >> /Users/rpg/.cache/common-lisp/acl-8.2-macosx-x64/Users/rpg/circa/code/csm/stochastic.fasl >> >> Or -- oh, wait! Did the recompilation of ASDF killed the tracing? >> >> If so, I don't think that :force t should be causing ASDF itself to rebuild. >> I >> understand why it's a dependency, but this shows why it's inappropriate: >> rebuilding asdf destroys our ability to inspect its behavior. >> >> Oh, and maybe it's also killing the PERFORM :after method in my system >> definition? >> >> I'd suggest :force t should stop before it gets to ASDF itself. Maybe we >> need >> to add :force :omg to do that! ;-) > > _______________________________________________ > asdf-devel mailing list > [email protected] > http://lists.common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel -- Pascal Costanza _______________________________________________ asdf-devel mailing list [email protected] http://lists.common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel
