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:
parent
59a6215af6
commit
3dc6efbe9c
18 changed files with 105 additions and 78 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue