1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[rubygems/rubygems] Fix ruby setup.rb --destdir /foo modifying global specs

Running a command like that is actually removing any previous default
bundler specs in the default RubyGems installation (outside of destdir).
It should instead only modify destdir.

5ed275383c
This commit is contained in:
David Rodríguez 2022-07-16 13:17:58 +02:00 committed by git
parent fae0d60120
commit fa5724cca9
2 changed files with 12 additions and 4 deletions

View file

@ -361,17 +361,17 @@ 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
specs_dir = if current_default_spec && default_dir == Gem.default_dir
Gem::Specification.remove_spec current_default_spec
loaded_from = current_default_spec.loaded_from
File.delete(loaded_from)
File.dirname(loaded_from)
else
File.join(default_dir, "specifications", "default")
target_specs_dir = File.join(default_dir, "specifications", "default")
mkdir_p target_specs_dir, :mode => 0755
target_specs_dir
end
mkdir_p specs_dir, :mode => 0755
bundler_spec = Dir.chdir("bundler") { Gem::Specification.load("bundler.gemspec") }
default_spec_path = File.join(specs_dir, "#{bundler_spec.full_name}.gemspec")
Gem.write_binary(default_spec_path, bundler_spec.to_ruby)

View file

@ -279,6 +279,14 @@ class TestGemCommandsSetupCommand < Gem::TestCase
@cmd.install_default_bundler_gem bin_dir
# leaves other versions of bundler gemspecs on default specification directory.
assert_path_exist previous_bundler_specification_path
assert_path_not_exist new_bundler_specification_path
# installs the updated bundler gemspec to destdir
assert_path_not_exist prepend_destdir(destdir, previous_bundler_specification_path)
assert_path_exist prepend_destdir(destdir, new_bundler_specification_path)
bundler_spec.executables.each do |e|
assert_path_exist prepend_destdir(destdir, File.join(@gemhome, 'gems', bundler_spec.full_name, bundler_spec.bindir, e))
end