ruby-changes:16707
From: evan <ko1@a...>
Date: Wed, 21 Jul 2010 15:30:59 +0900 (JST)
Subject: [ruby-changes:16707] Ruby:r28703 (trunk): Load gems properly. Fixes
evan 2010-07-21 15:30:40 +0900 (Wed, 21 Jul 2010) New Revision: 28703 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28703 Log: Load gems properly. Fixes [ruby-core:31377] Modified files: trunk/ChangeLog trunk/gem_prelude.rb trunk/lib/rubygems/custom_require.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 28702) +++ ChangeLog (revision 28703) @@ -1,3 +1,8 @@ +Wed Jul 21 15:22:17 2010 Evan Phoenix <evan@f...> + + * lib/rubygems/custom_require.rb, gem_prelude.rb: Load code from + from gems properly. + Wed Jul 21 15:15:02 2010 NARUSE, Yui <naruse@r...> * sprintf.c: add short documentation about named reference. Index: gem_prelude.rb =================================================================== --- gem_prelude.rb (revision 28702) +++ gem_prelude.rb (revision 28703) @@ -155,7 +155,7 @@ end def self.load_full_rubygems_library - return if @loaded_full_rubygems_library + return false if @loaded_full_rubygems_library remove @@ -163,7 +163,10 @@ if $".any? {|path| path.end_with?('/rubygems.rb')} raise LoadError, "another rubygems is already loaded from #{path}" end + require 'rubygems' + + return true end def self.path_to_full_rubygems_library @@ -200,11 +203,21 @@ extend QuickLoader def self.try_activate(path) - # Just a stub to make sure rubygems is loaded - QuickLoader.load_full_rubygems_library + # This method is only hit when the custom require is hit the first time. + # So we go off and dutifully load all of rubygems and retry the call + # to Gem.try_activate. We retry because full rubygems replaces this + # method with one that actually tries to find a gem for +path+ and load it. + # + # This is conditional because in the course of loading rubygems, the custom + # require will call back into here before all of rubygems is loaded. So + # we must not always retry the call. We only redo the call when + # load_full_rubygems_library returns true, which it only does the first + # time it's called. + # + if QuickLoader.load_full_rubygems_library + return Gem.try_activate(path) + end - # But doesn't actually load anything, so that custom_require - # can always call try_activate and get some decent response return false end Index: lib/rubygems/custom_require.rb =================================================================== --- lib/rubygems/custom_require.rb (revision 28702) +++ lib/rubygems/custom_require.rb (revision 28703) @@ -29,7 +29,9 @@ gem_original_require path rescue LoadError => load_error if load_error.message.end_with?(path) - return true if Gem.try_activate(path) + if Gem.try_activate(path) + return gem_original_require(path) + end end raise load_error -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/