diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-05-18 15:10:18 +0000 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2021-11-05 07:23:36 +0900 |
commit | 1506c8228b775776ce846e5cfdb6ce4b81963808 (patch) | |
tree | 21b6857ad5dbd1747d1509ba226d9f27fd0645f9 /lib/rubygems/commands/setup_command.rb | |
parent | 9503dd91a5b207d2215f7873b0442f52d2eb5c94 (diff) |
[rubygems/rubygems] Don't apply `--destdir` twice when running `setup.rb`
Prior to this patch, if I ran:
ruby setup.rb --destdir /foo
Then Bundler files would be written into /foo/foo, because destdir was
being prepended, even though `bundler_spec.bin_dir` already included
destdir.
https://github.com/rubygems/rubygems/commit/9e857ffb52
Diffstat (limited to 'lib/rubygems/commands/setup_command.rb')
-rw-r--r-- | lib/rubygems/commands/setup_command.rb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index 90f17b9037..edc4008cb8 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -385,6 +385,18 @@ By default, this RubyGems will install gem as: bundler_spec = Gem::Specification.load(default_spec_path) + # The base_dir value for a specification is inferred by walking up from the + # folder where the spec was `loaded_from`. In the case of default gems, we + # walk up two levels, because they live at `specifications/default/`, whereas + # in the case of regular gems we walk up just one level because they live at + # `specifications/`. However, in this case, the gem we are installing is + # misdetected as a regular gem, when it's a default gem in reality. This is + # because when there's a `:destdir`, the `loaded_from` path has changed and + # doesn't match `Gem.default_specifications_dir` which is the criteria to + # tag a gem as a default gem. So, in that case, write the correct + # `@base_dir` directly. + bundler_spec.instance_variable_set(:@base_dir, File.dirname(File.dirname(specs_dir))) + # Remove gemspec that was same version of vendored bundler. normal_gemspec = File.join(Gem.default_dir, "specifications", "bundler-#{bundler_spec.version}.gemspec") if File.file? normal_gemspec @@ -399,7 +411,6 @@ By default, this RubyGems will install gem as: end bundler_bin_dir = bundler_spec.bin_dir - bundler_bin_dir = File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform? mkdir_p bundler_bin_dir, :mode => 0755 bundler_spec.executables.each do |e| cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e) |