diff options
-rw-r--r-- | lib/rubygems/commands/setup_command.rb | 6 | ||||
-rw-r--r-- | test/rubygems/test_gem_commands_setup_command.rb | 4 |
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index bb2246ca31..c367d312de 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -361,9 +361,15 @@ By default, this RubyGems will install gem as: def install_default_bundler_gem(bin_dir) current_default_spec = Gem::Specification.default_stubs.find {|s| s.name == "bundler" } specs_dir = if current_default_spec && default_dir == Gem.default_dir + all_specs_current_version = Gem::Specification.stubs.select {|s| s.full_name == current_default_spec.full_name } + Gem::Specification.remove_spec current_default_spec loaded_from = current_default_spec.loaded_from File.delete(loaded_from) + + # Remove previous default gem executables if they were not shadowed by a regular gem + FileUtils.rm_rf current_default_spec.full_gem_path if all_specs_current_version.size == 1 + File.dirname(loaded_from) else target_specs_dir = File.join(default_dir, "specifications", "default") diff --git a/test/rubygems/test_gem_commands_setup_command.rb b/test/rubygems/test_gem_commands_setup_command.rb index 8eedb6c03a..c3622c02cd 100644 --- a/test/rubygems/test_gem_commands_setup_command.rb +++ b/test/rubygems/test_gem_commands_setup_command.rb @@ -224,8 +224,10 @@ class TestGemCommandsSetupCommand < Gem::TestCase # expect to remove normal gem that was same version. because it's promoted default gems. assert_path_not_exist File.join(Gem.dir, "specifications", "bundler-#{bundler_version}.gemspec") + # expect to remove the previous default version + assert_path_not_exist "#{Gem.dir}/gems/bundler-1.15.4" + assert_path_exist "#{Gem.dir}/gems/bundler-#{bundler_version}" - assert_path_exist "#{Gem.dir}/gems/bundler-1.15.4" assert_path_exist "#{Gem.dir}/gems/bundler-audit-1.0.0" end |