[rubygems/rubygems] Fix gem update --system leaving old default bundler executables around

https://github.com/rubygems/rubygems/commit/4b81add54c
This commit is contained in:
David Rodríguez 2024-10-21 13:43:36 +02:00 committed by git
parent ec0d0449dd
commit 1e1a37220b
2 changed files with 9 additions and 1 deletions

View File

@ -361,9 +361,15 @@ By default, this RubyGems will install gem as:
def install_default_bundler_gem(bin_dir) def install_default_bundler_gem(bin_dir)
current_default_spec = Gem::Specification.default_stubs.find {|s| s.name == "bundler" } current_default_spec = Gem::Specification.default_stubs.find {|s| s.name == "bundler" }
specs_dir = if current_default_spec && default_dir == Gem.default_dir 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 Gem::Specification.remove_spec current_default_spec
loaded_from = current_default_spec.loaded_from loaded_from = current_default_spec.loaded_from
File.delete(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) File.dirname(loaded_from)
else else
target_specs_dir = File.join(default_dir, "specifications", "default") target_specs_dir = File.join(default_dir, "specifications", "default")

View File

@ -224,8 +224,10 @@ class TestGemCommandsSetupCommand < Gem::TestCase
# expect to remove normal gem that was same version. because it's promoted default gems. # 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") 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-#{bundler_version}"
assert_path_exist "#{Gem.dir}/gems/bundler-1.15.4"
assert_path_exist "#{Gem.dir}/gems/bundler-audit-1.0.0" assert_path_exist "#{Gem.dir}/gems/bundler-audit-1.0.0"
end end