Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
Gem::Commands::SetupCommand#install_default_bundler_gem
install_default_bundler_gem(bin_dir)
lib/rubygems/commands/setup_command.rb
View on GitHub ↗
# File tmp/rubies/ruby-4.1.0-preview1/lib/rubygems/commands/setup_command.rb, line 340
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)
previous_specs_dir = File.dirname(loaded_from)
# Remove previous default gem executables if they were not shadowed by a
# regular gem. They live under the same root as the previous default
# gemspec, which is not necessarily default_dir.
if all_specs_current_version.size == 1
previous_root = File.dirname(File.dirname(previous_specs_dir))
FileUtils.rm_rf File.join(previous_root, "gems", current_default_spec.full_name)
end
previous_specs_dir
else
target_specs_dir = File.join(default_dir, "specifications", "default")
mkdir_p target_specs_dir, mode: 0o755
target_specs_dir
end
# Root directory that specs_dir belongs to. It may differ from default_dir
# when Gem.default_specifications_dir is customized to live under a
# different root, like Homebrew does. Executables must be extracted under
# the same root as the default gemspec, since that's where activation of
# the default gem will look for them.
bundler_install_dir = File.dirname(File.dirname(specs_dir))
new_bundler_spec = Gem::Specification.load("bundler.gemspec")
full_name = new_bundler_spec.full_name
gemspec_path = "#{full_name}.gemspec"
default_spec_path = File.join(specs_dir, gemspec_path)
Gem.write_binary(default_spec_path, new_bundler_spec.to_ruby)
# Remove gemspec that was same version of vendored bundler.
normal_gemspec = File.join(default_dir, "specifications", gemspec_path)
if File.file? normal_gemspec
File.delete normal_gemspec
end
# Remove gem files that were same version of vendored bundler. A regular
# gem lives under default_dir, which is not necessarily the same root as
# the default gemspec.
normal_gems_dir = File.join(default_dir, "gems")
if File.directory? normal_gems_dir
Dir.entries(normal_gems_dir).
select {|normal_gem| File.basename(normal_gem) == full_name }.
each {|normal_gem| rm_r File.join(normal_gems_dir, normal_gem) }
end
require_relative "../installer"
built_gem = Gem::Package.build(new_bundler_spec)
begin
installer = Gem::Installer.at(
built_gem,
env_shebang: options[:env_shebang],
format_executable: options[:format_executable],
force: options[:force],
bin_dir: bin_dir,
install_dir: bundler_install_dir,
wrappers: true
)
# We only need to install the executables here. The default spec was
# already written above, and lib/bundler.rb and lib/bundler/* are
# available under the site_ruby directory.
installer.extract_bin
installer.generate_bin
ensure
FileUtils.rm_f built_gem
end
new_bundler_spec.executables.each {|executable| bin_file_names << target_bin_path(bin_dir, executable) }
say "Bundler #{new_bundler_spec.version} installed"
end
No documentation available
See also
#generate_default_man_dir
#install_executables
#generate_default_dirs
#install_file
also in
4.0 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0