1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Merge rubygems master targeted RubyGems 3.1.0.

1172320540

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
hsbt 2019-01-22 06:28:04 +00:00
parent 59a6215af6
commit 3dc6efbe9c
18 changed files with 105 additions and 78 deletions

View file

@ -9,7 +9,7 @@
require 'rbconfig' require 'rbconfig'
module Gem module Gem
VERSION = "3.0.2".freeze VERSION = "3.1.0.pre1".freeze
end end
# Must be first since it unloads the prelude from 1.9.2 # Must be first since it unloads the prelude from 1.9.2

View file

@ -18,6 +18,10 @@ class Gem::Commands::BuildCommand < Gem::Command
add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options| add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options|
options[:output] = value options[:output] = value
end end
add_option '-C PATH', '', 'Run as if gem build was started in <PATH> instead of the current working directory.' do |value, options|
options[:build_path] = value
end
end end
def arguments # :nodoc: def arguments # :nodoc:
@ -60,9 +64,26 @@ Gems can be saved to a specified filename with the output option:
end end
if File.exist? gemspec if File.exist? gemspec
spec = Gem::Specification.load(gemspec)
if options[:build_path]
Dir.chdir(File.dirname(gemspec)) do Dir.chdir(File.dirname(gemspec)) do
spec = Gem::Specification.load File.basename(gemspec) spec = Gem::Specification.load File.basename(gemspec)
build_package(spec)
end
else
build_package(spec)
end
else
alert_error "Gemspec file not found: #{gemspec}"
terminate_interaction 1
end
end
private
def build_package(spec)
if spec if spec
Gem::Package.build( Gem::Package.build(
spec, spec,
@ -75,10 +96,4 @@ Gems can be saved to a specified filename with the output option:
terminate_interaction 1 terminate_interaction 1
end end
end end
else
alert_error "Gemspec file not found: #{gemspec}"
terminate_interaction 1
end
end
end end

View file

@ -15,6 +15,8 @@ https://rubygems.org) and adds it to the index.
The gem can be removed from the index and deleted from the server using the yank The gem can be removed from the index and deleted from the server using the yank
command. For further discussion see the help for the yank command. command. For further discussion see the help for the yank command.
The push command will use ~/.gem/credentials to authenticate to a server, but you can use the RubyGems environment variable GEM_HOST_API_KEY to set the api key to authenticate.
EOF EOF
end end

View file

@ -38,7 +38,9 @@ module Gem::GemcutterUtilities
# The API key from the command options or from the user's configuration. # The API key from the command options or from the user's configuration.
def api_key def api_key
if options[:key] if ENV["GEM_HOST_API_KEY"]
ENV["GEM_HOST_API_KEY"]
elsif options[:key]
verify_api_key options[:key] verify_api_key options[:key]
elsif Gem.configuration.api_keys.key?(host) elsif Gem.configuration.api_keys.key?(host)
Gem.configuration.api_keys[host] Gem.configuration.api_keys[host]

View file

@ -18,7 +18,7 @@ begin
module Gem module Gem
RDoc = ::RDoc::RubygemsHook RDoc = ::RDoc::RubygemsHook
end end
rescue LoadError
end
Gem.done_installing(&Gem::RDoc.method(:generation_hook)) Gem.done_installing(&Gem::RDoc.method(:generation_hook))
rescue LoadError
end

View file

@ -168,6 +168,7 @@ class Gem::Request
no_env_proxy = env_proxy.nil? || env_proxy.empty? no_env_proxy = env_proxy.nil? || env_proxy.empty?
return :no_proxy if scheme == 'https' && no_env_proxy
return get_proxy_from_env 'http' if no_env_proxy and _scheme != 'http' return get_proxy_from_env 'http' if no_env_proxy and _scheme != 'http'
return :no_proxy if no_env_proxy return :no_proxy if no_env_proxy

View file

@ -231,8 +231,6 @@ class Gem::Resolver
raise exc raise exc
end end
sources = []
groups = Hash.new { |hash, key| hash[key] = [] } groups = Hash.new { |hash, key| hash[key] = [] }
# create groups & sources in the same loop # create groups & sources in the same loop

View file

@ -1285,7 +1285,7 @@ class Gem::Specification < Gem::BasicSpecification
unresolved = unresolved_deps unresolved = unresolved_deps
unless unresolved.empty? unless unresolved.empty?
w = "W" + "ARN" w = "W" + "ARN"
warn "#{w}: Unresolved or ambigious specs during Gem::Specification.reset:" warn "#{w}: Unresolved or ambiguous specs during Gem::Specification.reset:"
unresolved.values.each do |dep| unresolved.values.each do |dep|
warn " #{dep}" warn " #{dep}"
@ -2254,6 +2254,7 @@ class Gem::Specification < Gem::BasicSpecification
attributes.each do |attr_name| attributes.each do |attr_name|
current_value = self.send attr_name current_value = self.send attr_name
current_value = current_value.sort if %i(files test_files).include? attr_name
if current_value != default_value(attr_name) or if current_value != default_value(attr_name) or
self.class.required_attribute? attr_name self.class.required_attribute? attr_name

View file

@ -1057,6 +1057,8 @@ Also, a list:
Gem.instance_variable_set :@platforms, nil Gem.instance_variable_set :@platforms, nil
Gem::Platform.instance_variable_set :@local, nil Gem::Platform.instance_variable_set :@local, nil
yield if block_given?
platform platform
end end

View file

@ -19,29 +19,6 @@ class Gem::Validator
require 'find' require 'find'
end end
##
# Given a gem file's contents, validates against its own MD5 checksum
# gem_data:: [String] Contents of the gem file
def verify_gem(gem_data)
# TODO remove me? The code here only validate an MD5SUM that was
# in some old formatted gems, but hasn't been for a long time.
end
##
# Given the path to a gem file, validates against its own MD5 checksum
#
# gem_path:: [String] Path to gem file
def verify_gem_file(gem_path)
File.open gem_path, Gem.binary_mode do |file|
gem_data = file.read
verify_gem gem_data
end
rescue Errno::ENOENT, Errno::EINVAL
raise Gem::VerificationError, "missing gem file #{gem_path}"
end
private private
def find_files_for_gem(gem_directory) def find_files_for_gem(gem_directory)
@ -105,7 +82,9 @@ class Gem::Validator
end end
begin begin
verify_gem_file(gem_path) unless File.readable?(gem_path)
raise Gem::VerificationError, "missing gem file #{gem_path}"
end
good, gone, unreadable = nil, nil, nil, nil good, gone, unreadable = nil, nil, nil, nil

View file

@ -156,7 +156,7 @@ class TestGem < Gem::TestCase
end end
def assert_self_install_permissions def assert_self_install_permissions
mask = /mingw|mswin/ =~ RUBY_PLATFORM ? 0700 : 0777 mask = win_platform? ? 0700 : 0777
options = { options = {
:dir_mode => 0500, :dir_mode => 0500,
:prog_mode => 0510, :prog_mode => 0510,
@ -198,6 +198,9 @@ class TestGem < Gem::TestCase
'gems/foo-1/bin/foo.cmd' => prog_mode, 'gems/foo-1/bin/foo.cmd' => prog_mode,
'gems/foo-1/data/foo.txt' => data_mode, 'gems/foo-1/data/foo.txt' => data_mode,
} }
# below is for intermittent errors on Appveyor & Travis 2019-01,
# see https://github.com/rubygems/rubygems/pull/2568
sleep 0.2
result = {} result = {}
Dir.chdir @gemhome do Dir.chdir @gemhome do
expected.each_key do |n| expected.each_key do |n|

View file

@ -207,6 +207,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
gs.write @gem.to_ruby gs.write @gem.to_ruby
end end
@cmd.options[:build_path] = gemspec_dir
@cmd.options[:args] = [gemspec_file] @cmd.options[:args] = [gemspec_file]
use_ui @ui do use_ui @ui do

View file

@ -199,6 +199,21 @@ class TestGemCommandsPushCommand < Gem::TestCase
send_battery send_battery
end end
def test_sending_gem_with_env_var_api_key
@host = "http://privategemserver.example"
@spec, @path = util_gem "freebird", "1.0.1" do |spec|
spec.metadata['allowed_push_host'] = @host
end
@api_key = "PRIVKEY"
ENV["GEM_HOST_API_KEY"] = "PRIVKEY"
@response = "Successfully registered gem: freebird (1.0.1)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
send_battery
end
def test_sending_gem_to_allowed_push_host_with_basic_credentials def test_sending_gem_to_allowed_push_host_with_basic_credentials
@sanitized_host = "http://privategemserver.example" @sanitized_host = "http://privategemserver.example"
@host = "http://user:password@privategemserver.example" @host = "http://user:password@privategemserver.example"

View file

@ -10,7 +10,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
if File.exist?(bundler_gemspec) if File.exist?(bundler_gemspec)
BUNDLER_VERS = File.read(bundler_gemspec).match(/VERSION = "(#{Gem::Version::VERSION_PATTERN})"/)[1] BUNDLER_VERS = File.read(bundler_gemspec).match(/VERSION = "(#{Gem::Version::VERSION_PATTERN})"/)[1]
else else
BUNDLER_VERS = "1.16.2".freeze BUNDLER_VERS = "2.0.1".freeze
end end
def setup def setup

View file

@ -25,7 +25,7 @@ class TestGemExtCmakeBuilder < Gem::TestCase
File.open File.join(@ext, 'CMakeLists.txt'), 'w' do |cmakelists| File.open File.join(@ext, 'CMakeLists.txt'), 'w' do |cmakelists|
cmakelists.write <<-eo_cmake cmakelists.write <<-eo_cmake
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.6)
project(self_build LANGUAGES NONE) project(self_build NONE)
install (FILES test.txt DESTINATION bin) install (FILES test.txt DESTINATION bin)
eo_cmake eo_cmake
end end

View file

@ -79,6 +79,17 @@ class TestGemRequest < Gem::TestCase
assert_equal URI(@proxy_uri), proxy assert_equal URI(@proxy_uri), proxy
end end
def test_proxy_ENV
ENV['http_proxy'] = "http://proxy"
ENV['https_proxy'] = ""
request = make_request URI('https://example'), nil, nil, nil
proxy = request.proxy_uri
assert_nil proxy
end
def test_configure_connection_for_https def test_configure_connection_for_https
connection = Net::HTTP.new 'localhost', 443 connection = Net::HTTP.new 'localhost', 443

View file

@ -652,6 +652,16 @@ end
end end
def test_platform_mswin def test_platform_mswin
if win_platform?
util_set_arch 'x86-mswin32-60' do
@gda.platform :mswin do
@gda.gem 'a'
end
assert_equal [dep('a')], @set.dependencies
refute_empty @set.dependencies
end
else
util_set_arch 'i686-darwin8.10.1' do util_set_arch 'i686-darwin8.10.1' do
@gda.platform :mswin do @gda.platform :mswin do
@gda.gem 'a' @gda.gem 'a'
@ -659,13 +669,6 @@ end
assert_empty @set.dependencies assert_empty @set.dependencies
end end
util_set_arch 'x86-mswin32-60' do
@gda.platform :mswin do
@gda.gem 'a'
end
refute_empty @set.dependencies
end end
end end
@ -708,6 +711,7 @@ end
end end
def test_platforms def test_platforms
unless win_platform?
util_set_arch 'i686-darwin8.10.1' do util_set_arch 'i686-darwin8.10.1' do
@gda.platforms :ruby do @gda.platforms :ruby do
@gda.gem 'a' @gda.gem 'a'
@ -721,13 +725,6 @@ end
assert_equal [dep('a')], @set.dependencies assert_equal [dep('a')], @set.dependencies
end end
util_set_arch 'x86-mswin32-60' do
@gda.platforms :mswin do
@gda.gem 'c'
end
assert_equal [dep('a'), dep('c')], @set.dependencies
end end
end end

View file

@ -2936,7 +2936,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
end end
expected = <<-EXPECTED expected = <<-EXPECTED
WARN: Unresolved or ambigious specs during Gem::Specification.reset: WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
x (= 1) x (= 1)
WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>' WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'
Please report a bug if this causes problems. Please report a bug if this causes problems.
@ -2964,7 +2964,7 @@ Please report a bug if this causes problems.
end end
expected = <<-EXPECTED expected = <<-EXPECTED
WARN: Unresolved or ambigious specs during Gem::Specification.reset: WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
x (= 1) x (= 1)
Available/installed versions of this gem: Available/installed versions of this gem:
- 1 - 1