зеркало из https://github.com/github/ruby.git
Родитель
583e06e28f
Коммит
7e084ed707
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче