diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rubygems.rb | 7 | ||||
| -rw-r--r-- | lib/rubygems/core_ext/kernel_require.rb | 8 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 47b1ce69d2..ad7ab10756 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -1216,6 +1216,13 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} ## # Find a Gem::Specification of default gem from +path+ + def find_default_spec(path) + @path_to_default_spec_map[path] + end + + ## + # Find an unresolved Gem::Specification of default gem from +path+ + def find_unresolved_default_spec(path) default_spec = @path_to_default_spec_map[path] default_spec if default_spec && loaded_specs[default_spec.name] != default_spec diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb index 50e3ea89b4..073966b696 100644 --- a/lib/rubygems/core_ext/kernel_require.rb +++ b/lib/rubygems/core_ext/kernel_require.rb @@ -42,7 +42,11 @@ module Kernel # If +path+ belongs to a default gem, we activate it and then go straight # to normal require - if spec = Gem.find_unresolved_default_spec(path) + if spec = Gem.find_default_spec(path) + name = spec.name + + next if Gem.loaded_specs[name] + # Ensure -I beats a default gem resolved_path = begin rp = nil @@ -60,7 +64,7 @@ module Kernel rp end - Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) unless + Kernel.send(:gem, name, Gem::Requirement.default_prerelease) unless resolved_path next |
