diff options
author | evan <evan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-07-21 06:30:40 +0000 |
---|---|---|
committer | evan <evan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-07-21 06:30:40 +0000 |
commit | 6113a5add0a05eea33935fb9dd95a8c8e5c2755d (patch) | |
tree | 6e49919efd22c6414688df0880f261bfc048fc91 | |
parent | 6e2850aa46b25d2f76fdd60c7466060f73994a85 (diff) |
Load gems properly. Fixes [ruby-core:31377]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | gem_prelude.rb | 23 | ||||
-rw-r--r-- | lib/rubygems/custom_require.rb | 4 |
3 files changed, 26 insertions, 6 deletions
@@ -1,3 +1,8 @@ +Wed Jul 21 15:22:17 2010 Evan Phoenix <evan@fallingsnow.net> + + * lib/rubygems/custom_require.rb, gem_prelude.rb: Load code from + from gems properly. + Wed Jul 21 15:15:02 2010 NARUSE, Yui <naruse@ruby-lang.org> * sprintf.c: add short documentation about named reference. diff --git a/gem_prelude.rb b/gem_prelude.rb index 700072b8ed..017adc2040 100644 --- a/gem_prelude.rb +++ b/gem_prelude.rb @@ -155,7 +155,7 @@ if defined?(Gem) then 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 defined?(Gem) then 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 @@ if defined?(Gem) then 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 diff --git a/lib/rubygems/custom_require.rb b/lib/rubygems/custom_require.rb index a410a3cfe0..480cb7e315 100644 --- a/lib/rubygems/custom_require.rb +++ b/lib/rubygems/custom_require.rb @@ -29,7 +29,9 @@ module Kernel 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 |