mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rubygems/ext/builder.rb: Fix incompatibilities when installing
extensions. Patch by Nobu. [ruby-trunk - Bug #7968] [ruby-trunk - Bug #7971] * lib/rubygems/ext/ext_conf_builder.rb: ditto. * lib/rubygems/installer.rb: ditto. * test/rubygems/test_gem_ext_ext_conf_builder.rb: Test for the above. * test/rubygems/test_gem_installer.rb: ditto. * lib/rubygems/commands/sources_command.rb: Prefer HTTPS over HTTP. * lib/rubygems/defaults.rb: ditto * lib/rubygems/dependency_resolver.rb: Ditto. * lib/rubygems/source.rb: ditto. * lib/rubygems/spec_fetcher.rb: ditto. * lib/rubygems/specification.rb: ditto. * lib/rubygems/test_utilities.rb: ditto. * test/rubygems/test_gem.rb: Test for the above. * test/rubygems/test_gem_commands_sources_command.rb: ditto. * test/rubygems/test_gem_dependency_resolver_api_set.rb: ditto. * test/rubygems/test_gem_remote_fetcher.rb: ditto. * test/rubygems/test_gem_source.rb: ditto. * test/rubygems/test_gem_spec_fetcher.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3fc7731297
commit
a5dfaca00a
19 changed files with 298 additions and 40 deletions
24
ChangeLog
24
ChangeLog
|
@ -1,3 +1,27 @@
|
||||||
|
Fri Mar 1 07:21:41 2013 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
|
* lib/rubygems/ext/builder.rb: Fix incompatibilities when installing
|
||||||
|
extensions. Patch by Nobu.
|
||||||
|
[ruby-trunk - Bug #7968] [ruby-trunk - Bug #7971]
|
||||||
|
* lib/rubygems/ext/ext_conf_builder.rb: ditto.
|
||||||
|
* lib/rubygems/installer.rb: ditto.
|
||||||
|
* test/rubygems/test_gem_ext_ext_conf_builder.rb: Test for the above.
|
||||||
|
* test/rubygems/test_gem_installer.rb: ditto.
|
||||||
|
|
||||||
|
* lib/rubygems/commands/sources_command.rb: Prefer HTTPS over HTTP.
|
||||||
|
* lib/rubygems/defaults.rb: ditto
|
||||||
|
* lib/rubygems/dependency_resolver.rb: Ditto.
|
||||||
|
* lib/rubygems/source.rb: ditto.
|
||||||
|
* lib/rubygems/spec_fetcher.rb: ditto.
|
||||||
|
* lib/rubygems/specification.rb: ditto.
|
||||||
|
* lib/rubygems/test_utilities.rb: ditto.
|
||||||
|
* test/rubygems/test_gem.rb: Test for the above.
|
||||||
|
* test/rubygems/test_gem_commands_sources_command.rb: ditto.
|
||||||
|
* test/rubygems/test_gem_dependency_resolver_api_set.rb: ditto.
|
||||||
|
* test/rubygems/test_gem_remote_fetcher.rb: ditto.
|
||||||
|
* test/rubygems/test_gem_source.rb: ditto.
|
||||||
|
* test/rubygems/test_gem_spec_fetcher.rb: ditto.
|
||||||
|
|
||||||
Fri Mar 1 03:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
|
Fri Mar 1 03:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
|
||||||
|
|
||||||
* ext/psych/lib/psych.rb: rdoc for Psych overview by Adam Stankiewicz
|
* ext/psych/lib/psych.rb: rdoc for Psych overview by Adam Stankiewicz
|
||||||
|
|
|
@ -65,6 +65,19 @@ class Gem::Commands::SourcesCommand < Gem::Command
|
||||||
end
|
end
|
||||||
|
|
||||||
if source_uri = options[:add] then
|
if source_uri = options[:add] then
|
||||||
|
uri = URI source_uri
|
||||||
|
|
||||||
|
if uri.scheme and uri.scheme.downcase == 'http' and
|
||||||
|
uri.host.downcase == 'rubygems.org' then
|
||||||
|
question = <<-QUESTION.chomp
|
||||||
|
https://rubygems.org is recommended for security over #{uri}
|
||||||
|
|
||||||
|
Do you want to add this insecure source?
|
||||||
|
QUESTION
|
||||||
|
|
||||||
|
terminate_interaction 1 unless ask_yes_no question
|
||||||
|
end
|
||||||
|
|
||||||
source = Gem::Source.new source_uri
|
source = Gem::Source.new source_uri
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -11,7 +11,7 @@ module Gem
|
||||||
# An Array of the default sources that come with RubyGems
|
# An Array of the default sources that come with RubyGems
|
||||||
|
|
||||||
def self.default_sources
|
def self.default_sources
|
||||||
%w[http://rubygems.org/]
|
%w[https://rubygems.org/]
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -69,6 +69,8 @@ module Gem
|
||||||
# and dependencies.
|
# and dependencies.
|
||||||
#
|
#
|
||||||
class APISpecification
|
class APISpecification
|
||||||
|
attr_reader :set # :nodoc:
|
||||||
|
|
||||||
def initialize(set, api_data)
|
def initialize(set, api_data)
|
||||||
@set = set
|
@set = set
|
||||||
@name = api_data[:name]
|
@name = api_data[:name]
|
||||||
|
@ -80,6 +82,14 @@ module Gem
|
||||||
|
|
||||||
attr_reader :name, :version, :dependencies
|
attr_reader :name, :version, :dependencies
|
||||||
|
|
||||||
|
def == other # :nodoc:
|
||||||
|
self.class === other and
|
||||||
|
@set == other.set and
|
||||||
|
@name == other.name and
|
||||||
|
@version == other.version and
|
||||||
|
@dependencies == other.dependencies
|
||||||
|
end
|
||||||
|
|
||||||
def full_name
|
def full_name
|
||||||
"#{@name}-#{@version}"
|
"#{@name}-#{@version}"
|
||||||
end
|
end
|
||||||
|
@ -91,6 +101,7 @@ module Gem
|
||||||
class APISet
|
class APISet
|
||||||
def initialize
|
def initialize
|
||||||
@data = Hash.new { |h,k| h[k] = [] }
|
@data = Hash.new { |h,k| h[k] = [] }
|
||||||
|
@dep_uri = URI 'https://rubygems.org/api/v1/dependencies'
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return data for all versions of the gem +name+.
|
# Return data for all versions of the gem +name+.
|
||||||
|
@ -100,8 +111,8 @@ module Gem
|
||||||
return @data[name]
|
return @data[name]
|
||||||
end
|
end
|
||||||
|
|
||||||
u = URI.parse "http://rubygems.org/api/v1/dependencies?gems=#{name}"
|
uri = @dep_uri + "?gems=#{name}"
|
||||||
str = Net::HTTP.get(u)
|
str = Gem::RemoteFetcher.fetcher.fetch_path uri
|
||||||
|
|
||||||
Marshal.load(str).each do |ver|
|
Marshal.load(str).each do |ver|
|
||||||
@data[ver[:name]] << ver
|
@data[ver[:name]] << ver
|
||||||
|
@ -134,8 +145,8 @@ module Gem
|
||||||
|
|
||||||
return if needed.empty?
|
return if needed.empty?
|
||||||
|
|
||||||
u = URI.parse "http://rubygems.org/api/v1/dependencies?gems=#{needed.join ','}"
|
uri = @dep_uri + "?gems=#{needed.sort.join ','}"
|
||||||
str = Net::HTTP.get(u)
|
str = Gem::RemoteFetcher.fetcher.fetch_path uri
|
||||||
|
|
||||||
Marshal.load(str).each do |ver|
|
Marshal.load(str).each do |ver|
|
||||||
@data[ver[:name]] << ver
|
@data[ver[:name]] << ver
|
||||||
|
|
|
@ -16,13 +16,6 @@ class Gem::Ext::Builder
|
||||||
raise Gem::InstallError, "Makefile not found:\n\n#{results.join "\n"}"
|
raise Gem::InstallError, "Makefile not found:\n\n#{results.join "\n"}"
|
||||||
end
|
end
|
||||||
|
|
||||||
mf = Gem.read_binary 'Makefile'
|
|
||||||
mf = mf.gsub(/^RUBYARCHDIR\s*=\s*\$[^$]*/, "RUBYARCHDIR = #{dest_path}")
|
|
||||||
mf = mf.gsub(/^RUBYLIBDIR\s*=\s*\$[^$]*/, "RUBYLIBDIR = #{dest_path}")
|
|
||||||
mf = mf.gsub(/\s*\S+\.time$/, "")
|
|
||||||
|
|
||||||
File.open('Makefile', 'wb') {|f| f.print mf}
|
|
||||||
|
|
||||||
# try to find make program from Ruby configure arguments first
|
# try to find make program from Ruby configure arguments first
|
||||||
RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
|
RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
|
||||||
make_program = $1 || ENV['MAKE'] || ENV['make']
|
make_program = $1 || ENV['MAKE'] || ENV['make']
|
||||||
|
|
|
@ -6,16 +6,36 @@
|
||||||
|
|
||||||
require 'rubygems/ext/builder'
|
require 'rubygems/ext/builder'
|
||||||
require 'rubygems/command'
|
require 'rubygems/command'
|
||||||
|
require 'fileutils'
|
||||||
|
require 'tmpdir'
|
||||||
|
|
||||||
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
||||||
|
|
||||||
def self.build(extension, directory, dest_path, results, args=[])
|
def self.build(extension, directory, dest_path, results, args=[])
|
||||||
cmd = "#{Gem.ruby} #{File.basename extension}"
|
pwd = Dir.pwd
|
||||||
|
cmd = "#{Gem.ruby} -r./siteconf #{File.join pwd, File.basename(extension)}"
|
||||||
cmd << " #{args.join ' '}" unless args.empty?
|
cmd << " #{args.join ' '}" unless args.empty?
|
||||||
|
|
||||||
|
Dir.mktmpdir("gem-install.") do |tmpdir|
|
||||||
|
Dir.chdir(tmpdir) do
|
||||||
|
open("siteconf.rb", "w") do |f|
|
||||||
|
f.puts "require 'rbconfig'"
|
||||||
|
f.puts "dest_path = #{dest_path.dump}"
|
||||||
|
%w[sitearchdir sitelibdir].each do |dir|
|
||||||
|
f.puts "RbConfig::MAKEFILE_CONFIG['#{dir}'] = dest_path"
|
||||||
|
f.puts "RbConfig::CONFIG['#{dir}'] = dest_path"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
run cmd, results
|
run cmd, results
|
||||||
|
|
||||||
make dest_path, results
|
make dest_path, results
|
||||||
|
ensure
|
||||||
|
FileUtils.mv("mkmf.log", pwd) if $! and File.exist?("mkmf.log")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
results
|
results
|
||||||
end
|
end
|
||||||
|
|
|
@ -681,7 +681,7 @@ TEXT
|
||||||
say results.join("\n") if Gem.configuration.really_verbose
|
say results.join("\n") if Gem.configuration.really_verbose
|
||||||
end
|
end
|
||||||
rescue
|
rescue
|
||||||
extension_build_error(extension_dir, results.join("\n"))
|
extension_build_error(extension_dir, results.join("\n"), $@)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -689,7 +689,7 @@ TEXT
|
||||||
##
|
##
|
||||||
# Logs the build +output+ in +build_dir+, then raises ExtensionBuildError.
|
# Logs the build +output+ in +build_dir+, then raises ExtensionBuildError.
|
||||||
|
|
||||||
def extension_build_error(build_dir, output)
|
def extension_build_error(build_dir, output, backtrace = nil)
|
||||||
gem_make_out = File.join build_dir, 'gem_make.out'
|
gem_make_out = File.join build_dir, 'gem_make.out'
|
||||||
|
|
||||||
open gem_make_out, 'wb' do |io| io.puts output end
|
open gem_make_out, 'wb' do |io| io.puts output end
|
||||||
|
@ -703,7 +703,7 @@ Gem files will remain installed in #{gem_dir} for inspection.
|
||||||
Results logged to #{gem_make_out}
|
Results logged to #{gem_make_out}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
raise ExtensionBuildError, message
|
raise ExtensionBuildError, message, backtrace
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -141,4 +141,14 @@ class Gem::Source
|
||||||
fetcher = Gem::RemoteFetcher.fetcher
|
fetcher = Gem::RemoteFetcher.fetcher
|
||||||
fetcher.download spec, @uri.to_s, dir
|
fetcher.download spec, @uri.to_s, dir
|
||||||
end
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Replaces the URI for this source with +uri+. Used for upgrading this
|
||||||
|
# source to HTTPS
|
||||||
|
|
||||||
|
def uri= uri # :nodoc:
|
||||||
|
@api_uri = nil
|
||||||
|
@uri = uri
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -188,6 +188,8 @@ class Gem::SpecFetcher
|
||||||
list = {}
|
list = {}
|
||||||
|
|
||||||
Gem.sources.each_source do |source|
|
Gem.sources.each_source do |source|
|
||||||
|
source = upgrade_http_source source
|
||||||
|
|
||||||
begin
|
begin
|
||||||
names = case type
|
names = case type
|
||||||
when :latest
|
when :latest
|
||||||
|
@ -225,5 +227,31 @@ class Gem::SpecFetcher
|
||||||
cache[source.uri] ||= source.load_specs(type)
|
cache[source.uri] ||= source.load_specs(type)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def upgrade_http_source source
|
||||||
|
uri = source.uri
|
||||||
|
|
||||||
|
return source unless uri.scheme.downcase == 'http'
|
||||||
|
|
||||||
|
https_uri = uri.dup
|
||||||
|
https_uri.scheme = 'https'
|
||||||
|
https_uri += '/'
|
||||||
|
|
||||||
|
Gem::RemoteFetcher.fetcher.fetch_path https_uri, nil, true
|
||||||
|
|
||||||
|
say "Upgraded #{uri} to HTTPS"
|
||||||
|
|
||||||
|
https_uri += uri.request_uri
|
||||||
|
|
||||||
|
source.uri = URI https_uri.to_s # cast to URI::HTTPS
|
||||||
|
|
||||||
|
source
|
||||||
|
rescue Gem::RemoteFetcher::FetchError
|
||||||
|
say "Upgrading #{uri} to HTTPS failed, continuing" if
|
||||||
|
Gem.configuration.really_verbose
|
||||||
|
|
||||||
|
source
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
# s.authors = ["Ruby Coder"]
|
# s.authors = ["Ruby Coder"]
|
||||||
# s.email = 'rubycoder@example.com'
|
# s.email = 'rubycoder@example.com'
|
||||||
# s.files = ["lib/example.rb"]
|
# s.files = ["lib/example.rb"]
|
||||||
# s.homepage = 'http://rubygems.org/gems/example'
|
# s.homepage = 'https://rubygems.org/gems/example'
|
||||||
# end
|
# end
|
||||||
#
|
#
|
||||||
# Starting in RubyGems 1.9.0, a Specification can hold arbitrary
|
# Starting in RubyGems 1.9.0, a Specification can hold arbitrary
|
||||||
|
|
|
@ -49,7 +49,7 @@ class Gem::FakeFetcher
|
||||||
@data[path]
|
@data[path]
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_path path, mtime = nil
|
def fetch_path path, mtime = nil, head = false
|
||||||
data = find_data(path)
|
data = find_data(path)
|
||||||
|
|
||||||
if data.respond_to?(:call) then
|
if data.respond_to?(:call) then
|
||||||
|
|
|
@ -665,7 +665,7 @@ class TestGem < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_default_sources
|
def test_self_default_sources
|
||||||
assert_equal %w[http://rubygems.org/], Gem.default_sources
|
assert_equal %w[https://rubygems.org/], Gem.default_sources
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_detect_gemdeps
|
def test_self_detect_gemdeps
|
||||||
|
|
|
@ -118,6 +118,45 @@ source #{@gem_repo} already present in the cache
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_add_http_rubygems_org
|
||||||
|
http_rubygems_org = 'http://rubygems.org'
|
||||||
|
util_setup_fake_fetcher
|
||||||
|
|
||||||
|
install_specs @a1
|
||||||
|
|
||||||
|
specs = Gem::Specification.map { |spec|
|
||||||
|
[spec.name, spec.version, spec.original_platform]
|
||||||
|
}
|
||||||
|
|
||||||
|
specs_dump_gz = StringIO.new
|
||||||
|
Zlib::GzipWriter.wrap specs_dump_gz do |io|
|
||||||
|
Marshal.dump specs, io
|
||||||
|
end
|
||||||
|
|
||||||
|
@fetcher.data["#{http_rubygems_org}/specs.#{@marshal_version}.gz"] =
|
||||||
|
specs_dump_gz.string
|
||||||
|
|
||||||
|
@cmd.handle_options %W[--add #{http_rubygems_org}]
|
||||||
|
|
||||||
|
util_setup_spec_fetcher
|
||||||
|
|
||||||
|
ui = Gem::MockGemUi.new "n"
|
||||||
|
|
||||||
|
use_ui ui do
|
||||||
|
assert_raises Gem::MockGemUi::TermError do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal [@gem_repo], Gem.sources
|
||||||
|
|
||||||
|
expected = <<-EXPECTED
|
||||||
|
EXPECTED
|
||||||
|
|
||||||
|
assert_equal expected, @ui.output
|
||||||
|
assert_empty @ui.error
|
||||||
|
end
|
||||||
|
|
||||||
def test_execute_add_bad_uri
|
def test_execute_add_bad_uri
|
||||||
@cmd.handle_options %w[--add beta-gems.example.com]
|
@cmd.handle_options %w[--add beta-gems.example.com]
|
||||||
|
|
||||||
|
|
80
test/rubygems/test_gem_dependency_resolver_api_set.rb
Normal file
80
test/rubygems/test_gem_dependency_resolver_api_set.rb
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
require 'rubygems/test_case'
|
||||||
|
require 'rubygems/dependency_resolver'
|
||||||
|
|
||||||
|
class TestGemDependencyResolverAPISet < Gem::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
|
||||||
|
@DR = Gem::DependencyResolver
|
||||||
|
|
||||||
|
@api_set = @DR::APISet.new
|
||||||
|
@uri = 'https://rubygems.org/api/v1/dependencies'
|
||||||
|
@fetcher = Gem::FakeFetcher.new
|
||||||
|
Gem::RemoteFetcher.fetcher = @fetcher
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_all
|
||||||
|
b_entry = {
|
||||||
|
:name => 'b',
|
||||||
|
:number => '2',
|
||||||
|
:platform => 'ruby',
|
||||||
|
:dependencies => [['a', '>= 0']],
|
||||||
|
}
|
||||||
|
|
||||||
|
@fetcher.data["#{@uri}?gems=b"] = Marshal.dump [b_entry]
|
||||||
|
|
||||||
|
b_req = @DR::DependencyRequest.new dep('b', '>= 0'), nil
|
||||||
|
|
||||||
|
expected = [
|
||||||
|
@DR::APISpecification.new(@api_set, b_entry)
|
||||||
|
]
|
||||||
|
|
||||||
|
assert_equal expected, @api_set.find_all(b_req)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_prefetch
|
||||||
|
b_entry = {
|
||||||
|
:name => 'b',
|
||||||
|
:number => '2',
|
||||||
|
:platform => 'ruby',
|
||||||
|
:dependencies => [['a', '>= 0']],
|
||||||
|
}
|
||||||
|
|
||||||
|
a_entry = {
|
||||||
|
:name => 'a',
|
||||||
|
:number => '2',
|
||||||
|
:platform => 'ruby',
|
||||||
|
:dependencies => [],
|
||||||
|
}
|
||||||
|
|
||||||
|
@fetcher.data["#{@uri}?gems=a,b"] = Marshal.dump [a_entry, b_entry]
|
||||||
|
|
||||||
|
a_req = @DR::DependencyRequest.new dep('a', '>= 0'), nil
|
||||||
|
b_req = @DR::DependencyRequest.new dep('b', '>= 0'), nil
|
||||||
|
|
||||||
|
@api_set.prefetch([b_req, a_req])
|
||||||
|
|
||||||
|
assert_equal [a_entry], @api_set.versions('a')
|
||||||
|
assert_equal [b_entry], @api_set.versions('b')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_versions_cache
|
||||||
|
entry = {
|
||||||
|
:name => 'b',
|
||||||
|
:number => '2',
|
||||||
|
:platform => 'ruby',
|
||||||
|
:dependencies => [['a', '>= 0']],
|
||||||
|
}
|
||||||
|
|
||||||
|
@fetcher.data["#{@uri}?gems=b"] = Marshal.dump [entry]
|
||||||
|
|
||||||
|
assert_equal [entry], @api_set.versions('b')
|
||||||
|
|
||||||
|
@fetcher.data["#{@uri}?gems=b"] = 'garbage'
|
||||||
|
|
||||||
|
assert_equal [entry], @api_set.versions('b'), 'version data must be cached'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
|
@ -30,7 +30,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
|
assert_match(/^#{Gem.ruby} .*extconf.rb/, output[0])
|
||||||
assert_equal "creating Makefile\n", output[1]
|
assert_equal "creating Makefile\n", output[1]
|
||||||
case RUBY_PLATFORM
|
case RUBY_PLATFORM
|
||||||
when /mswin/ then
|
when /mswin/ then
|
||||||
|
@ -107,10 +107,10 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
||||||
|
|
||||||
assert_match(/\Aextconf failed:
|
assert_match(/\Aextconf failed:
|
||||||
|
|
||||||
#{Gem.ruby} extconf.rb.*
|
#{Gem.ruby} .*extconf.rb.*
|
||||||
checking for main\(\) in .*?nonexistent/m, error.message)
|
checking for main\(\) in .*?nonexistent/m, error.message)
|
||||||
|
|
||||||
assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
|
assert_match(/^#{Gem.ruby} .*extconf.rb/, output[0])
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_class_make
|
def test_class_make
|
||||||
|
@ -134,12 +134,6 @@ checking for main\(\) in .*?nonexistent/m, error.message)
|
||||||
|
|
||||||
assert_equal make_command, output[0]
|
assert_equal make_command, output[0]
|
||||||
assert_equal "#{make_command} install", output[2]
|
assert_equal "#{make_command} install", output[2]
|
||||||
|
|
||||||
edited_makefile = Gem.read_binary makefile_path
|
|
||||||
edited_makefile.gsub!(/\r/, '') if Gem.win_platform?
|
|
||||||
|
|
||||||
assert_match "\nRUBYARCHDIR = #{@ext}$(target_prefix)\n", edited_makefile
|
|
||||||
assert_match "\nRUBYLIBDIR = #{@ext}$(target_prefix)\n", edited_makefile
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_class_make_no_Makefile
|
def test_class_make_no_Makefile
|
||||||
|
|
|
@ -81,7 +81,7 @@ load Gem.bin_path('a', 'executable', version)
|
||||||
|
|
||||||
gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
|
gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
|
||||||
|
|
||||||
assert_match %r%#{Regexp.escape Gem.ruby} extconf\.rb%,
|
assert_match %r%#{Regexp.escape Gem.ruby} .*extconf\.rb%,
|
||||||
File.read(gem_make_out)
|
File.read(gem_make_out)
|
||||||
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
|
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
|
||||||
File.read(gem_make_out)
|
File.read(gem_make_out)
|
||||||
|
@ -119,7 +119,8 @@ load Gem.bin_path('a', 'executable', version)
|
||||||
File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f|
|
File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f|
|
||||||
f.write <<-'RUBY'
|
f.write <<-'RUBY'
|
||||||
puts "IN EXTCONF"
|
puts "IN EXTCONF"
|
||||||
File.open 'extconf_args', 'w' do |f|
|
extconf_args = File.join File.dirname(__FILE__), 'extconf_args'
|
||||||
|
File.open extconf_args, 'w' do |f|
|
||||||
f.puts ARGV.inspect
|
f.puts ARGV.inspect
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -399,6 +399,9 @@ gems:
|
||||||
@fetcher.instance_variable_set :@a1, @a1
|
@fetcher.instance_variable_set :@a1, @a1
|
||||||
@fetcher.instance_variable_set :@a2, @a2
|
@fetcher.instance_variable_set :@a2, @a2
|
||||||
def @fetcher.fetch_path uri, mtime = nil, head = false
|
def @fetcher.fetch_path uri, mtime = nil, head = false
|
||||||
|
raise Gem::RemoteFetcher::FetchError.new 'no http upgrade', uri if
|
||||||
|
uri.scheme != 'http'
|
||||||
|
|
||||||
case uri.request_uri
|
case uri.request_uri
|
||||||
when /#{@a1.spec_name}/ then
|
when /#{@a1.spec_name}/ then
|
||||||
Gem.deflate Marshal.dump @a1
|
Gem.deflate Marshal.dump @a1
|
||||||
|
|
|
@ -184,5 +184,16 @@ class TestGemSource < Gem::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_uri_equals
|
||||||
|
@source.api_uri # cached
|
||||||
|
|
||||||
|
refute_equal URI('https://secure.example'), @source.api_uri
|
||||||
|
|
||||||
|
@source.uri = URI 'https://secure.example'
|
||||||
|
|
||||||
|
assert_equal URI('https://secure.example'), @source.uri
|
||||||
|
assert_equal URI('https://secure.example'), @source.api_uri
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -32,13 +32,14 @@ class TestGemSpecFetcher < Gem::TestCase
|
||||||
Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
|
Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
|
||||||
}
|
}
|
||||||
|
|
||||||
v = Gem.marshal_version
|
@v = Gem.marshal_version
|
||||||
s_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@specs)))
|
@s_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@specs)))
|
||||||
l_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@latest_specs)))
|
@l_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@latest_specs)))
|
||||||
p_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@prerelease_specs)))
|
@p_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@prerelease_specs)))
|
||||||
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
|
|
||||||
@fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
|
@fetcher.data["#{@gem_repo}specs.#{@v}.gz"] = @s_zip
|
||||||
@fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
|
@fetcher.data["#{@gem_repo}latest_specs.#{@v}.gz"] = @l_zip
|
||||||
|
@fetcher.data["#{@gem_repo}prerelease_specs.#{@v}.gz"] = @p_zip
|
||||||
|
|
||||||
@sf = Gem::SpecFetcher.new
|
@sf = Gem::SpecFetcher.new
|
||||||
|
|
||||||
|
@ -200,7 +201,6 @@ class TestGemSpecFetcher < Gem::TestCase
|
||||||
assert_equal comp.sort, specs[@source].sort
|
assert_equal comp.sort, specs[@source].sort
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def test_available_specs_cache
|
def test_available_specs_cache
|
||||||
specs, _ = @sf.available_specs(:latest)
|
specs, _ = @sf.available_specs(:latest)
|
||||||
|
|
||||||
|
@ -240,5 +240,36 @@ class TestGemSpecFetcher < Gem::TestCase
|
||||||
assert_kind_of Gem::SourceFetchProblem, errors.first
|
assert_kind_of Gem::SourceFetchProblem, errors.first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_upgrade_http_source
|
||||||
|
Gem.configuration.verbose = :really
|
||||||
|
|
||||||
|
source = Gem::Source.new URI 'http://example'
|
||||||
|
same_source = nil
|
||||||
|
https_source = nil
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
same_source = @sf.upgrade_http_source source
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal URI('http://example'), same_source.uri
|
||||||
|
|
||||||
|
@fetcher.data['https://example/'] = 'hello'
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
https_source = @sf.upgrade_http_source source
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal URI('https://example'), https_source.uri
|
||||||
|
|
||||||
|
assert_empty @ui.error
|
||||||
|
|
||||||
|
expected = <<-EXPECTED
|
||||||
|
Upgrading http://example to HTTPS failed, continuing
|
||||||
|
Upgraded http://example to HTTPS
|
||||||
|
EXPECTED
|
||||||
|
|
||||||
|
assert_equal expected, @ui.output
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue