Details
-
Type:
Defect
-
Status:
In Progress
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: Approved Backlog
-
Component/s: None
-
Labels:None
Description
Reported by scgilardi, Apr 24, 2009 What (small set of) steps will reproduce the problem? "require" and "use" support a ":reload-all" flag that is intended to cause the specified libs to be reloaded along with all libs on which they directly or indirectly depend. This is implemented by temporarily binding a "loaded-libs" var to the empty set and then loading the specified libs. AOT compilation added another "already loaded" mechanism to clojure.lang.RT.load() which is currently not sensitive to a "reload- all" being in progress and breaks its operation in the following case: A, B, and C are libs A depends on B. (via :require in its ns form) B depends on C. (via :require in its ns form) B has been compiled (B.class is on classpath) At the repl I "require" A which loads A, B, and C (either from class files or clj files) I modify C.clj At the repl I "require" A with the :reload-all flag, intending to pick up the changes to C C is not reloaded because RT.load() skips loading B: B.class exists, is already loaded, and B.clj hasn't changed since it was compiled. What is the expected output? What do you see instead? I expect :reload-all to be effective. It isn't. What version are you using? svn 1354, 1.0.0RC1 Was this discussed on the group? If so, please provide a link to the discussion: http://groups.google.com/group/clojure/browse_frm/thread/9bbc290321fd895f/e6a967250021462a#e6a967250021462a Please provide any additional information below. I'll upload a patch soon that creates a "*reload-all*" var with a root binding of nil and code to bind it to true when the current thread has a :reload-all call pending. When *reload-all* is true, RT.load() will (re)load all libs from their ".clj" files even if they're already loaded. The fix for this may need to be coordinated with a fix for issue #3.
looking at the compiler it looks like most of what I mentioned above is already implemented, just need RT to reflectively call load() on the namespace class in the right place