Merge RubyGems-3.3.19 and Bundler-2.3.19

This commit is contained in:
Hiroshi SHIBATA 2022-08-22 11:49:38 +09:00 committed by nagachika
parent 0918783347
commit 44c926f3a9
362 changed files with 7843 additions and 7605 deletions

View file

@ -1,5 +1,5 @@
# frozen_string_literal: true
require_relative '../command'
require_relative "../command"
##
# Installs RubyGems itself. This command is ordinarily only available from a
@ -12,47 +12,47 @@ class Gem::Commands::SetupCommand < Gem::Command
ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
def initialize
super 'setup', 'Install RubyGems',
super "setup", "Install RubyGems",
:format_executable => false, :document => %w[ri],
:force => true,
:site_or_vendor => 'sitelibdir',
:destdir => '', :prefix => '', :previous_version => '',
:site_or_vendor => "sitelibdir",
:destdir => "", :prefix => "", :previous_version => "",
:regenerate_binstubs => true,
:regenerate_plugins => true
add_option '--previous-version=VERSION',
'Previous version of RubyGems',
'Used for changelog processing' do |version, options|
add_option "--previous-version=VERSION",
"Previous version of RubyGems",
"Used for changelog processing" do |version, options|
options[:previous_version] = version
end
add_option '--prefix=PREFIX',
'Prefix path for installing RubyGems',
'Will not affect gem repository location' do |prefix, options|
add_option "--prefix=PREFIX",
"Prefix path for installing RubyGems",
"Will not affect gem repository location" do |prefix, options|
options[:prefix] = File.expand_path prefix
end
add_option '--destdir=DESTDIR',
'Root directory to install RubyGems into',
'Mainly used for packaging RubyGems' do |destdir, options|
add_option "--destdir=DESTDIR",
"Root directory to install RubyGems into",
"Mainly used for packaging RubyGems" do |destdir, options|
options[:destdir] = File.expand_path destdir
end
add_option '--[no-]vendor',
'Install into vendorlibdir not sitelibdir' do |vendor, options|
options[:site_or_vendor] = vendor ? 'vendorlibdir' : 'sitelibdir'
add_option "--[no-]vendor",
"Install into vendorlibdir not sitelibdir" do |vendor, options|
options[:site_or_vendor] = vendor ? "vendorlibdir" : "sitelibdir"
end
add_option '--[no-]format-executable',
'Makes `gem` match ruby',
'If Ruby is ruby18, gem will be gem18' do |value, options|
add_option "--[no-]format-executable",
"Makes `gem` match ruby",
"If Ruby is ruby18, gem will be gem18" do |value, options|
options[:format_executable] = value
end
add_option '--[no-]document [TYPES]', Array,
'Generate documentation for RubyGems',
'List the documentation types you wish to',
'generate. For example: rdoc,ri' do |value, options|
add_option "--[no-]document [TYPES]", Array,
"Generate documentation for RubyGems",
"List the documentation types you wish to",
"generate. For example: rdoc,ri" do |value, options|
options[:document] = case value
when nil then %w[rdoc ri]
when false then []
@ -60,46 +60,46 @@ class Gem::Commands::SetupCommand < Gem::Command
end
end
add_option '--[no-]rdoc',
'Generate RDoc documentation for RubyGems' do |value, options|
add_option "--[no-]rdoc",
"Generate RDoc documentation for RubyGems" do |value, options|
if value
options[:document] << 'rdoc'
options[:document] << "rdoc"
else
options[:document].delete 'rdoc'
options[:document].delete "rdoc"
end
options[:document].uniq!
end
add_option '--[no-]ri',
'Generate RI documentation for RubyGems' do |value, options|
add_option "--[no-]ri",
"Generate RI documentation for RubyGems" do |value, options|
if value
options[:document] << 'ri'
options[:document] << "ri"
else
options[:document].delete 'ri'
options[:document].delete "ri"
end
options[:document].uniq!
end
add_option '--[no-]regenerate-binstubs',
'Regenerate gem binstubs' do |value, options|
add_option "--[no-]regenerate-binstubs",
"Regenerate gem binstubs" do |value, options|
options[:regenerate_binstubs] = value
end
add_option '--[no-]regenerate-plugins',
'Regenerate gem plugins' do |value, options|
add_option "--[no-]regenerate-plugins",
"Regenerate gem plugins" do |value, options|
options[:regenerate_plugins] = value
end
add_option '-f', '--[no-]force',
'Forcefully overwrite binstubs' do |value, options|
add_option "-f", "--[no-]force",
"Forcefully overwrite binstubs" do |value, options|
options[:force] = value
end
add_option('-E', '--[no-]env-shebang',
'Rewrite executables with a shebang',
'of /usr/bin/env') do |value, options|
add_option("-E", "--[no-]env-shebang",
"Rewrite executables with a shebang",
"of /usr/bin/env") do |value, options|
options[:env_shebang] = value
end
@ -107,7 +107,7 @@ class Gem::Commands::SetupCommand < Gem::Command
end
def check_ruby_version
required_version = Gem::Requirement.new '>= 2.3.0'
required_version = Gem::Requirement.new ">= 2.3.0"
unless required_version.satisfied_by? Gem.ruby_version
alert_error "Expected Ruby version #{required_version}, is #{Gem.ruby_version}"
@ -149,7 +149,7 @@ By default, this RubyGems will install gem as:
check_ruby_version
require 'fileutils'
require "fileutils"
if Gem.configuration.really_verbose
extend FileUtils::Verbose
else
@ -194,7 +194,7 @@ By default, this RubyGems will install gem as:
end
if options[:previous_version].empty?
options[:previous_version] = Gem::VERSION.sub(/[0-9]+$/, '0')
options[:previous_version] = Gem::VERSION.sub(/[0-9]+$/, "0")
end
options[:previous_version] = Gem::Version.new(options[:previous_version])
@ -216,7 +216,7 @@ By default, this RubyGems will install gem as:
end
if documentation_success
if options[:document].include? 'rdoc'
if options[:document].include? "rdoc"
say "Rdoc documentation was installed. You may now invoke:"
say " gem server"
say "and then peruse beautifully formatted documentation for your gems"
@ -227,7 +227,7 @@ By default, this RubyGems will install gem as:
say
end
if options[:document].include? 'ri'
if options[:document].include? "ri"
say "Ruby Interactive (ri) documentation was installed. ri is kind of like man "
say "pages for Ruby libraries. You may access it like this:"
say " ri Classname"
@ -244,14 +244,14 @@ By default, this RubyGems will install gem as:
def install_executables(bin_dir)
prog_mode = options[:prog_mode] || 0755
executables = { 'gem' => 'bin' }
executables = { "gem" => "bin" }
executables.each do |tool, path|
say "Installing #{tool} executable" if @verbose
Dir.chdir path do
bin_file = "gem"
require 'tmpdir'
require "tmpdir"
dest_file = target_bin_path(bin_dir, bin_file)
bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
@ -260,7 +260,7 @@ By default, this RubyGems will install gem as:
bin = File.readlines bin_file
bin[0] = shebang
File.open bin_tmp_file, 'w' do |fp|
File.open bin_tmp_file, "w" do |fp|
fp.puts bin.join
end
@ -275,7 +275,7 @@ By default, this RubyGems will install gem as:
begin
bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
File.open bin_cmd_file, 'w' do |file|
File.open bin_cmd_file, "w" do |file|
file.puts <<-TEXT
@ECHO OFF
IF NOT "%~f0" == "~f0" GOTO :WinNT
@ -296,7 +296,7 @@ By default, this RubyGems will install gem as:
def shebang
if options[:env_shebang]
ruby_name = RbConfig::CONFIG['ruby_install_name']
ruby_name = RbConfig::CONFIG["ruby_install_name"]
@env_path ||= ENV_PATHS.find {|env_path| File.executable? env_path }
"#!#{@env_path} #{ruby_name}\n"
else
@ -305,8 +305,8 @@ By default, this RubyGems will install gem as:
end
def install_lib(lib_dir)
libs = { 'RubyGems' => 'lib' }
libs['Bundler'] = 'bundler/lib'
libs = { "RubyGems" => "lib" }
libs["Bundler"] = "bundler/lib"
libs.each do |tool, path|
say "Installing #{tool}" if @verbose
@ -319,7 +319,7 @@ By default, this RubyGems will install gem as:
end
def install_rdoc
gem_doc_dir = File.join Gem.dir, 'doc'
gem_doc_dir = File.join Gem.dir, "doc"
rubygems_name = "rubygems-#{Gem::VERSION}"
rubygems_doc_dir = File.join gem_doc_dir, rubygems_name
@ -333,19 +333,19 @@ By default, this RubyGems will install gem as:
(not File.exist? rubygems_doc_dir or
File.writable? rubygems_doc_dir)
say "Removing old RubyGems RDoc and ri" if @verbose
Dir[File.join(Gem.dir, 'doc', 'rubygems-[0-9]*')].each do |dir|
Dir[File.join(Gem.dir, "doc", "rubygems-[0-9]*")].each do |dir|
rm_rf dir
end
require_relative '../rdoc'
require_relative "../rdoc"
fake_spec = Gem::Specification.new 'rubygems', Gem::VERSION
fake_spec = Gem::Specification.new "rubygems", Gem::VERSION
def fake_spec.full_gem_path
File.expand_path '../../..', __dir__
File.expand_path "../../..", __dir__
end
generate_ri = options[:document].include? 'ri'
generate_rdoc = options[:document].include? 'rdoc'
generate_ri = options[:document].include? "ri"
generate_rdoc = options[:document].include? "rdoc"
rdoc = Gem::RDoc.new fake_spec, generate_rdoc, generate_ri
rdoc.generate
@ -360,34 +360,24 @@ By default, this RubyGems will install gem as:
end
def install_default_bundler_gem(bin_dir)
specs_dir = File.join(default_dir, "specifications", "default")
mkdir_p specs_dir, :mode => 0755
bundler_spec = Dir.chdir("bundler") { Gem::Specification.load("bundler.gemspec") }
current_default_spec = Gem::Specification.default_stubs.find {|s| s.name == "bundler" }
if current_default_spec
File.delete(current_default_spec.loaded_from)
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
target_specs_dir = File.join(default_dir, "specifications", "default")
mkdir_p target_specs_dir, :mode => 0755
target_specs_dir
end
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)
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(default_dir, "specifications", "bundler-#{bundler_spec.version}.gemspec")
if File.file? normal_gemspec
@ -407,7 +397,7 @@ By default, this RubyGems will install gem as:
cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
end
require_relative '../installer'
require_relative "../installer"
Dir.chdir("bundler") do
built_gem = Gem::Package.build(bundler_spec)
@ -449,10 +439,10 @@ By default, this RubyGems will install gem as:
prefix = options[:prefix]
if prefix.empty?
man_dir = RbConfig::CONFIG['mandir']
man_dir = RbConfig::CONFIG["mandir"]
return unless man_dir
else
man_dir = File.join prefix, 'man'
man_dir = File.join prefix, "man"
end
prepend_destdir_if_present(man_dir)
@ -464,10 +454,10 @@ By default, this RubyGems will install gem as:
if prefix.empty?
lib_dir = RbConfig::CONFIG[site_or_vendor]
bin_dir = RbConfig::CONFIG['bindir']
bin_dir = RbConfig::CONFIG["bindir"]
else
lib_dir = File.join prefix, 'lib'
bin_dir = File.join prefix, 'bin'
lib_dir = File.join prefix, "lib"
bin_dir = File.join prefix, "bin"
end
[prepend_destdir_if_present(lib_dir), prepend_destdir_if_present(bin_dir)]
@ -475,19 +465,19 @@ By default, this RubyGems will install gem as:
def files_in(dir)
Dir.chdir dir do
Dir.glob(File.join('**', '*'), File::FNM_DOTMATCH).
Dir.glob(File.join("**", "*"), File::FNM_DOTMATCH).
select {|f| !File.directory?(f) }
end
end
def remove_old_bin_files(bin_dir)
old_bin_files = {
'gem_mirror' => 'gem mirror',
'gem_server' => 'gem server',
'gemlock' => 'gem lock',
'gemri' => 'ri',
'gemwhich' => 'gem which',
'index_gem_repository.rb' => 'gem generate_index',
"gem_mirror" => "gem mirror",
"gem_server" => "gem server",
"gemlock" => "gem lock",
"gemri" => "ri",
"gemwhich" => "gem which",
"index_gem_repository.rb" => "gem generate_index",
}
old_bin_files.each do |old_bin_file, new_name|
@ -496,7 +486,7 @@ By default, this RubyGems will install gem as:
deprecation_message = "`#{old_bin_file}` has been deprecated. Use `#{new_name}` instead."
File.open old_bin_path, 'w' do |fp|
File.open old_bin_path, "w" do |fp|
fp.write <<-EOF
#!#{Gem.ruby}
@ -506,15 +496,15 @@ abort "#{deprecation_message}"
next unless Gem.win_platform?
File.open "#{old_bin_path}.bat", 'w' do |fp|
File.open "#{old_bin_path}.bat", "w" do |fp|
fp.puts %(@ECHO.#{deprecation_message})
end
end
end
def remove_old_lib_files(lib_dir)
lib_dirs = { File.join(lib_dir, 'rubygems') => 'lib/rubygems' }
lib_dirs[File.join(lib_dir, 'bundler')] = 'bundler/lib/bundler'
lib_dirs = { File.join(lib_dir, "rubygems") => "lib/rubygems" }
lib_dirs[File.join(lib_dir, "bundler")] = "bundler/lib/bundler"
lib_dirs.each do |old_lib_dir, new_lib_dir|
lib_files = files_in(new_lib_dir)
@ -522,11 +512,11 @@ abort "#{deprecation_message}"
to_remove = old_lib_files - lib_files
gauntlet_rubygems = File.join(lib_dir, 'gauntlet_rubygems.rb')
gauntlet_rubygems = File.join(lib_dir, "gauntlet_rubygems.rb")
to_remove << gauntlet_rubygems if File.exist? gauntlet_rubygems
to_remove.delete_if do |file|
file.start_with? 'defaults'
file.start_with? "defaults"
end
remove_file_list(to_remove, old_lib_dir)
@ -552,7 +542,7 @@ abort "#{deprecation_message}"
end
def show_release_notes
release_notes = File.join Dir.pwd, 'CHANGELOG.md'
release_notes = File.join Dir.pwd, "CHANGELOG.md"
release_notes =
if File.exist? release_notes
@ -583,10 +573,10 @@ abort "#{deprecation_message}"
end
def uninstall_old_gemcutter
require_relative '../uninstaller'
require_relative "../uninstaller"
ui = Gem::Uninstaller.new('gemcutter', :all => true, :ignore => true,
:version => '< 0.4')
ui = Gem::Uninstaller.new("gemcutter", :all => true, :ignore => true,
:version => "< 0.4")
ui.uninstall
rescue Gem::InstallError
end
@ -635,7 +625,7 @@ abort "#{deprecation_message}"
destdir = options[:destdir]
return path if destdir.empty?
File.join(options[:destdir], path.gsub(/^[a-zA-Z]:/, ''))
File.join(options[:destdir], path.gsub(/^[a-zA-Z]:/, ""))
end
def install_file_list(files, dest_dir)