Merge RubyGems and Bundler master

Merge from 793ad95ecb
This commit is contained in:
Hiroshi SHIBATA 2021-12-14 21:14:58 +09:00
Родитель 583e06e28f
Коммит 7e084ed707
14 изменённых файлов: 73 добавлений и 66 удалений

Просмотреть файл

@ -32,13 +32,13 @@ class Bundler::ConnectionPool
# rubocop:disable Style/MethodMissingSuper
# rubocop:disable Style/MissingRespondToMissing
if ::Gem.ruby_version >= ::Gem::Version.new("3.0.0")
if ::RUBY_VERSION >= "3.0.0"
def method_missing(name, *args, **kwargs, &block)
with do |connection|
connection.send(name, *args, **kwargs, &block)
end
end
elsif ::Gem.ruby_version >= ::Gem::Version.new("2.7.0")
elsif ::RUBY_VERSION >= "2.7.0"
ruby2_keywords def method_missing(name, *args, &block)
with do |connection|
connection.send(name, *args, &block)

Просмотреть файл

@ -1293,7 +1293,12 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
end
def default_gem_load_paths
@default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1]
@default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp|
expanded = File.expand_path(lp)
next expanded unless File.exist?(expanded)
File.realpath(expanded)
end
end
end
@ -1310,37 +1315,19 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
autoload :Licenses, File.expand_path('rubygems/util/licenses', __dir__)
autoload :NameTuple, File.expand_path('rubygems/name_tuple', __dir__)
autoload :PathSupport, File.expand_path('rubygems/path_support', __dir__)
autoload :Platform, File.expand_path('rubygems/platform', __dir__)
autoload :RequestSet, File.expand_path('rubygems/request_set', __dir__)
autoload :Requirement, File.expand_path('rubygems/requirement', __dir__)
autoload :Resolver, File.expand_path('rubygems/resolver', __dir__)
autoload :Source, File.expand_path('rubygems/source', __dir__)
autoload :SourceList, File.expand_path('rubygems/source_list', __dir__)
autoload :SpecFetcher, File.expand_path('rubygems/spec_fetcher', __dir__)
autoload :Specification, File.expand_path('rubygems/specification', __dir__)
autoload :Util, File.expand_path('rubygems/util', __dir__)
autoload :Version, File.expand_path('rubygems/version', __dir__)
end
require_relative 'rubygems/exceptions'
require_relative 'rubygems/specification'
# REFACTOR: This should be pulled out into some kind of hacks file.
begin
##
# Defaults the Ruby implementation wants to provide for RubyGems
require "rubygems/defaults/#{RUBY_ENGINE}"
rescue LoadError
end
##
# Loads the default specs.
Gem::Specification.load_defaults
require_relative 'rubygems/core_ext/kernel_gem'
require_relative 'rubygems/core_ext/kernel_require'
require_relative 'rubygems/core_ext/kernel_warn'
begin
##
# Defaults the operating system (or packager) wants to provide for RubyGems.
@ -1356,3 +1343,19 @@ rescue StandardError => e
"the problem and ask for help."
raise e.class, msg
end
begin
##
# Defaults the Ruby implementation wants to provide for RubyGems
require "rubygems/defaults/#{RUBY_ENGINE}"
rescue LoadError
end
##
# Loads the default specs.
Gem::Specification.load_defaults
require_relative 'rubygems/core_ext/kernel_gem'
require_relative 'rubygems/core_ext/kernel_require'
require_relative 'rubygems/core_ext/kernel_warn'

Просмотреть файл

@ -12,8 +12,6 @@ class Gem::Commands::SetupCommand < Gem::Command
ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
def initialize
require 'tmpdir'
super 'setup', 'Install RubyGems',
:format_executable => false, :document => %w[ri],
:force => true,
@ -253,6 +251,8 @@ By default, this RubyGems will install gem as:
Dir.chdir path do
bin_file = "gem"
require 'tmpdir'
dest_file = target_bin_path(bin_dir, bin_file)
bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"

Просмотреть файл

@ -1,5 +1,5 @@
# frozen_string_literal: true
require_relative "deprecate"
require_relative "version"
##
# A Requirement is a set of one or more version restrictions. It supports a

Просмотреть файл

@ -9,6 +9,8 @@
require_relative 'deprecate'
require_relative 'basic_specification'
require_relative 'stub_specification'
require_relative 'platform'
require_relative 'requirement'
require_relative 'specification_policy'
require_relative 'util/list'
@ -179,18 +181,14 @@ class Gem::Specification < Gem::BasicSpecification
end
def self.clear_specs # :nodoc:
@@all_specs_mutex.synchronize do
@@all = nil
@@stubs = nil
@@stubs_by_name = {}
@@spec_with_requirable_file = {}
@@active_stub_with_requirable_file = {}
end
@@all = nil
@@stubs = nil
@@stubs_by_name = {}
@@spec_with_requirable_file = {}
@@active_stub_with_requirable_file = {}
end
private_class_method :clear_specs
@@all_specs_mutex = Thread::Mutex.new
clear_specs
# Sentinel object to represent "not found" stubs
@ -758,7 +756,7 @@ class Gem::Specification < Gem::BasicSpecification
attr_accessor :specification_version
def self._all # :nodoc:
@@all_specs_mutex.synchronize { @@all ||= Gem.loaded_specs.values | stubs.map(&:to_spec) }
@@all ||= Gem.loaded_specs.values | stubs.map(&:to_spec)
end
def self.clear_load_cache # :nodoc:
@ -1086,7 +1084,7 @@ class Gem::Specification < Gem::BasicSpecification
# +prerelease+ is true.
def self.latest_specs(prerelease = false)
_latest_specs Gem::Specification._all, prerelease
_latest_specs Gem::Specification.stubs, prerelease
end
##

Просмотреть файл

@ -149,13 +149,6 @@
# For the last example, single-digit versions are automatically extended with
# a zero to give a sensible result.
# Our code style opens classes directly without opening the intermediate
# modules. This works because tha main entrypoint `rubygems.rb`, which defines
# the root `Gem` module, is usually required first. But in this case we want to
# allow using `Gem::Version` without loading the rest of rubygems, so we
# explicit define the `Gem` placeholder module first.
module Gem; end
require_relative "deprecate"
class Gem::Version

Просмотреть файл

@ -638,7 +638,7 @@ RSpec.describe "bundle clean" do
s.executables = "irb"
end
realworld_system_gems "fiddle --version 1.0.6", "tsort --version 0.1.0", "pathname --version 0.1.0", "set --version 1.0.1"
realworld_system_gems "fiddle --version 1.0.8", "tsort --version 0.1.0", "pathname --version 0.1.0", "set --version 1.0.1"
install_gemfile <<-G
source "#{file_uri_for(gem_repo2)}"

Просмотреть файл

@ -614,20 +614,20 @@ RSpec.describe "bundle exec" do
it "loads the correct optparse when `auto_install` is set, and optparse is a dependency" do
if Gem.ruby_version >= Gem::Version.new("3.0.0") && Gem.rubygems_version < Gem::Version.new("3.3.0.a")
skip "optparse is a default gem, and rubygems loads install during install"
skip "optparse is a default gem, and rubygems loads it during install"
end
build_repo4 do
build_gem "fastlane", "2.192.0" do |s|
s.executables = "fastlane"
s.add_dependency "optparse", "~> 0.1.1"
s.add_dependency "optparse", "~> 999.999.999"
end
build_gem "optparse", "0.1.0"
build_gem "optparse", "0.1.1"
build_gem "optparse", "999.999.998"
build_gem "optparse", "999.999.999"
end
system_gems "optparse-0.1.0", :gem_repo => gem_repo4
system_gems "optparse-999.999.998", :gem_repo => gem_repo4
bundle "config set auto_install 1"
bundle "config set --local path vendor/bundle"
@ -638,7 +638,7 @@ RSpec.describe "bundle exec" do
G
bundle "exec fastlane"
expect(out).to include("Installing optparse 0.1.1")
expect(out).to include("Installing optparse 999.999.999")
expect(out).to include("2.192.0")
end

Просмотреть файл

@ -113,7 +113,7 @@ RSpec.shared_examples "bundle install --standalone" do
skip "does not work on rubygems versions where `--install_dir` doesn't respect --default" unless Gem::Installer.for_spec(loaded_gemspec, :install_dir => "/foo").default_spec_file == "/foo/specifications/default/bundler-#{Bundler::VERSION}.gemspec" # Since rubygems 3.2.0.rc.2
skip "does not work on old rubies because the realworld gems that need to be installed don't support them" if RUBY_VERSION < "2.7.0"
realworld_system_gems "fiddle --version 1.0.6", "tsort --version 0.1.0"
realworld_system_gems "fiddle --version 1.0.8", "tsort --version 0.1.0"
necessary_system_gems = ["optparse --version 0.1.1", "psych --version 3.3.2", "yaml --version 0.1.1", "logger --version 1.4.3", "etc --version 1.2.0", "stringio --version 3.0.0"]
necessary_system_gems += ["shellwords --version 0.1.0", "base64 --version 0.1.0", "resolv --version 0.2.1"] if Gem.rubygems_version < Gem::Version.new("3.3.3.a")

Просмотреть файл

@ -944,7 +944,7 @@ dependencies: []
end
def test_self_outdated_and_latest_remotes
specs = spec_fetcher do |fetcher|
spec_fetcher do |fetcher|
fetcher.download 'a', 4
fetcher.download 'b', 3
@ -953,8 +953,8 @@ dependencies: []
end
expected = [
[specs['a-3.a'], v(4)],
[specs['b-2'], v(3)],
[Gem::Specification.stubs.find {|s| s.full_name == 'a-3.a' }, v(4)],
[Gem::Specification.stubs.find {|s| s.full_name == 'b-2' }, v(3)],
]
assert_equal expected, Gem::Specification.outdated_and_latest_version.to_a

Просмотреть файл

@ -17,16 +17,4 @@ class TestProjectSanity < Gem::TestCase
assert status.success?, err
end
def test_require_and_use_rubygems_version
err, status = Open3.capture2e(
*ruby_with_rubygems_in_load_path,
"--disable-gems",
"-rrubygems/version",
"-e",
"Gem::Version.new('2.7.0.preview1') >= Gem::Version.new(RUBY_VERSION)"
)
assert status.success?, err
end
end

Просмотреть файл

@ -22,6 +22,29 @@ class GemTest < Gem::TestCase
"the problem and ask for help."
end
def test_operating_system_customizing_default_dir
pend "does not apply to truffleruby" if RUBY_ENGINE == 'truffleruby'
pend "loads a custom defaults/jruby file that gets in the middle" if RUBY_ENGINE == 'jruby'
# On a non existing default dir, there should be no gems
path = util_install_operating_system_rb <<-RUBY
module Gem
def self.default_dir
File.expand_path("foo")
end
end
RUBY
output = Gem::Util.popen(
*ruby_with_rubygems_and_fake_operating_system_in_load_path(path),
'-e',
"require \"rubygems\"; puts Gem::Specification.stubs.map(&:full_name)",
{:err => [:child, :out]}
).strip
assert_empty output
end
private
def util_install_operating_system_rb(content)

Просмотреть файл

@ -45,6 +45,7 @@ GEM
PLATFORMS
arm64-darwin-20
arm64-darwin-21
universal-java-11
x86_64-darwin-19
x86_64-darwin-20

Просмотреть файл

@ -51,6 +51,7 @@ GEM
PLATFORMS
arm64-darwin-20
arm64-darwin-21
universal-java-11
x86_64-darwin-19
x86_64-darwin-20