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

* lib/rubygems: Update to RubyGems 2.1.3

Fixed installing platform gems

	  Restored concurrent requires

	  Fixed installing gems with extensions with --install-dir

	  Fixed `gem fetch -v` to install the latest version

	  Fixed installing gems with "./" in their files entries

	* test/rubygems/test_gem_package.rb:  Tests for the above.

	* NEWS:  Updated for RubyGems 2.1.3


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2013-09-13 01:40:42 +00:00
parent e6a317bf6c
commit fdb6a621b0
13 changed files with 211 additions and 74 deletions

View file

@ -1,3 +1,21 @@
Fri Sep 13 10:40:28 2013 Eric Hodel <drbrain@segment7.net>
* lib/rubygems: Update to RubyGems 2.1.3
Fixed installing platform gems
Restored concurrent requires
Fixed installing gems with extensions with --install-dir
Fixed `gem fetch -v` to install the latest version
Fixed installing gems with "./" in their files entries
* test/rubygems/test_gem_package.rb: Tests for the above.
* NEWS: Updated for RubyGems 2.1.3
Thu Sep 12 22:40:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org> Thu Sep 12 22:40:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (RUBY_CHECK_SIGNEDNESS): macro to check signedness of a * configure.in (RUBY_CHECK_SIGNEDNESS): macro to check signedness of a

4
NEWS
View file

@ -175,8 +175,8 @@ with all sufficient information, see the ChangeLog file.
Rinda::RingFinger for details. Rinda::RingFinger for details.
* RubyGems * RubyGems
* Updated to 2.1.0. See * Updated to 2.1.3. See
http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.1.0+%2F+2013-09-09 http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.1.3+%2F+2013-09-12
for release notes. for release notes.
* Socket * Socket

View file

@ -8,7 +8,7 @@
require 'rbconfig' require 'rbconfig'
module Gem module Gem
VERSION = '2.1.0' VERSION = '2.1.3'
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

@ -52,13 +52,15 @@ then repackaging it.
dep = Gem::Dependency.new gem_name, version dep = Gem::Dependency.new gem_name, version
dep.prerelease = options[:prerelease] dep.prerelease = options[:prerelease]
specs_and_sources, errors = Gem::SpecFetcher.fetcher.spec_for_dependency dep specs_and_sources, errors =
Gem::SpecFetcher.fetcher.spec_for_dependency dep
if platform then if platform then
filtered = specs_and_sources.select { |s,| s.platform == platform } filtered = specs_and_sources.select { |s,| s.platform == platform }
specs_and_sources = filtered unless filtered.empty? specs_and_sources = filtered unless filtered.empty?
end end
spec, source = specs_and_sources.sort_by { |s,| s.version }.first spec, source = specs_and_sources.max_by { |s,| s.version }
if spec.nil? then if spec.nil? then
show_lookup_failure gem_name, version, errors, options[:domain] show_lookup_failure gem_name, version, errors, options[:domain]

View file

@ -48,7 +48,12 @@ module Kernel
# normal require handle loading a gem from the rescue below. # normal require handle loading a gem from the rescue below.
if Gem::Specification.unresolved_deps.empty? then if Gem::Specification.unresolved_deps.empty? then
return gem_original_require(path) begin
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path)
ensure
RUBYGEMS_ACTIVATION_MONITOR.enter
end
end end
# If +path+ is for a gem that has already been loaded, don't # If +path+ is for a gem that has already been loaded, don't
@ -61,7 +66,12 @@ module Kernel
s.activated? and s.contains_requirable_file? path s.activated? and s.contains_requirable_file? path
} }
return gem_original_require(path) if spec begin
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path)
ensure
RUBYGEMS_ACTIVATION_MONITOR.enter
end if spec
# Attempt to find +path+ in any unresolved gems... # Attempt to find +path+ in any unresolved gems...
@ -109,11 +119,21 @@ module Kernel
valid.activate valid.activate
end end
gem_original_require path begin
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path)
ensure
RUBYGEMS_ACTIVATION_MONITOR.enter
end
rescue LoadError => load_error rescue LoadError => load_error
if load_error.message.start_with?("Could not find") or if load_error.message.start_with?("Could not find") or
(load_error.message.end_with?(path) and Gem.try_activate(path)) then (load_error.message.end_with?(path) and Gem.try_activate(path)) then
return gem_original_require(path) begin
RUBYGEMS_ACTIVATION_MONITOR.exit
return gem_original_require(path)
ensure
RUBYGEMS_ACTIVATION_MONITOR.enter
end
end end
raise load_error raise load_error

View file

@ -131,8 +131,9 @@ class Gem::DependencyResolver
return conflict return conflict
end end
# Get a list of all specs that satisfy dep # Get a list of all specs that satisfy dep and platform
possible = @set.find_all dep possible = @set.find_all dep
possible = select_local_platforms possible
case possible.size case possible.size
when 0 when 0
@ -228,6 +229,15 @@ class Gem::DependencyResolver
specs specs
end end
##
# Returns the gems in +specs+ that match the local platform.
def select_local_platforms specs # :nodoc:
specs.select do |spec|
Gem::Platform.match spec.platform
end
end
end end
require 'rubygems/dependency_resolver/api_set' require 'rubygems/dependency_resolver/api_set'

View file

@ -43,7 +43,7 @@ class Gem::DependencyResolver::IndexSpecification
unless Gem::Platform::RUBY == @platform then unless Gem::Platform::RUBY == @platform then
q.breakable q.breakable
q.text @platform q.text @platform.to_s
end end
q.breakable q.breakable

View file

@ -213,6 +213,8 @@ class Gem::Installer
FileUtils.mkdir_p gem_dir FileUtils.mkdir_p gem_dir
spec.loaded_from = spec_file
if @options[:install_as_default] if @options[:install_as_default]
extract_bin extract_bin
write_default_spec write_default_spec
@ -230,8 +232,6 @@ class Gem::Installer
say spec.post_install_message unless spec.post_install_message.nil? say spec.post_install_message unless spec.post_install_message.nil?
spec.loaded_from = spec_file
Gem::Specification.add_spec spec unless Gem::Specification.include? spec Gem::Specification.add_spec spec unless Gem::Specification.include? spec
run_post_install_hooks run_post_install_hooks

View file

@ -339,9 +339,13 @@ EOM
def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc: def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc:
open_tar_gz io do |tar| open_tar_gz io do |tar|
tar.each do |entry| tar.each do |entry|
next unless File.fnmatch pattern, entry.full_name # Some entries start with "./" which fnmatch does not like, see github
# issue #644
full_name = entry.full_name.sub %r%\A\./%, ''
destination = install_location entry.full_name, destination_dir next unless File.fnmatch pattern, full_name
destination = install_location full_name, destination_dir
FileUtils.rm_rf destination FileUtils.rm_rf destination

View file

@ -34,6 +34,32 @@ class TestGemCommandsFetchCommand < Gem::TestCase
'gem repository directories must not be created' 'gem repository directories must not be created'
end end
def test_execute_latest
util_setup_fake_fetcher
util_setup_spec_fetcher @a1, @a2
@fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
File.read(@a1.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
File.read(@a2.cache_file)
refute_path_exists File.join(@tempdir, 'cache'), 'sanity check'
@cmd.options[:args] = [@a2.name]
@cmd.options[:version] = req('>= 0.1')
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert_path_exists(File.join(@tempdir, @a2.file_name),
"#{@a2.full_name} not fetched")
refute_path_exists File.join(@tempdir, 'cache'),
'gem repository directories must not be created'
end
def test_execute_prerelease def test_execute_prerelease
util_setup_fake_fetcher true util_setup_fake_fetcher true
util_clear_gems util_clear_gems
@ -53,8 +79,8 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end end
end end
assert_path_exists(File.join(@tempdir, @a2_pre.file_name), assert_path_exists(File.join(@tempdir, @a2.file_name),
"#{@a2_pre.full_name} not fetched") "#{@a2.full_name} not fetched")
end end
def test_execute_specific_prerelease def test_execute_specific_prerelease

View file

@ -68,23 +68,28 @@ class TestGemDependencyResolver < Gem::TestCase
def test_picks_best_platform def test_picks_best_platform
is = Gem::DependencyResolver::IndexSpecification is = Gem::DependencyResolver::IndexSpecification
a2_p = quick_spec 'a' do |s| s.platform = Gem::Platform.local end unknown = Gem::Platform.new 'unknown'
version = Gem::Version.new 2 a2_p1 = quick_spec 'a', 2 do |s| s.platform = Gem::Platform.local end
a3_p2 = quick_spec 'a', 3 do |s| s.platform = unknown end
v2 = v(2)
v3 = v(3)
source = Gem::Source.new @gem_repo source = Gem::Source.new @gem_repo
s = set s = set
a2 = is.new s, 'a', version, source, Gem::Platform::RUBY a2 = is.new s, 'a', v2, source, Gem::Platform::RUBY
a2_p = is.new s, 'a', version, source, Gem::Platform.local.to_s a2_p1 = is.new s, 'a', v2, source, Gem::Platform.local.to_s
a3_p2 = is.new s, 'a', v3, source, unknown
s.add a2_p s.add a3_p2
s.add a2_p1
s.add a2 s.add a2
ad = make_dep "a" ad = make_dep "a"
res = Gem::DependencyResolver.new([ad], s) res = Gem::DependencyResolver.new([ad], s)
assert_set [a2_p], res.resolve assert_set [a2_p1], res.resolve
end end
def test_only_returns_spec_once def test_only_returns_spec_once
@ -348,4 +353,18 @@ class TestGemDependencyResolver < Gem::TestCase
assert_set [b1, c1, d2], r.resolve assert_set [b1, c1, d2], r.resolve
end end
def test_select_local_platforms
r = Gem::DependencyResolver.new nil, nil
a1 = quick_spec 'a', 1
a1_p1 = quick_spec 'a', 1 do |s| s.platform = Gem::Platform.local end
a1_p2 = quick_spec 'a', 1 do |s| s.platform = 'unknown' end
selected = r.select_local_platforms [a1, a1_p1, a1_p2]
assert_equal [a1, a1_p1], selected
end
end end

View file

@ -73,7 +73,7 @@ load Gem.bin_path('a', 'executable', version)
@installer.generate_bin @installer.generate_bin
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert File.exist? installed_exec assert_path_exists installed_exec
wrapper = File.read installed_exec wrapper = File.read installed_exec
assert_match %r|generated by RubyGems|, wrapper assert_match %r|generated by RubyGems|, wrapper
@ -136,7 +136,7 @@ gem 'other', version
@installer.generate_bin # should not raise @installer.generate_bin # should not raise
installed_exec = File.join util_inst_bindir, 'foo-executable-bar' installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
assert File.exist? installed_exec assert_path_exists installed_exec
wrapper = File.read installed_exec wrapper = File.read installed_exec
assert_match %r|generated by RubyGems|, wrapper assert_match %r|generated by RubyGems|, wrapper
@ -165,7 +165,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert File.exist? installed_exec assert_path_exists installed_exec
wrapper = File.read installed_exec wrapper = File.read installed_exec
assert_match %r|generated by RubyGems|, wrapper assert_match %r|generated by RubyGems|, wrapper
@ -178,7 +178,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert File.exist? installed_exec assert_path_exists installed_exec
wrapper = File.read installed_exec wrapper = File.read installed_exec
assert_match %r|generated by RubyGems|, wrapper assert_match %r|generated by RubyGems|, wrapper
@ -252,7 +252,7 @@ gem 'other', version
assert_equal true, File.directory?(util_inst_bindir) assert_equal true, File.directory?(util_inst_bindir)
installed_exec = File.join(util_inst_bindir, 'executable') installed_exec = File.join(util_inst_bindir, 'executable')
assert_equal true, File.exist?(installed_exec) assert_path_exists installed_exec
assert_equal mask, File.stat(installed_exec).mode unless win_platform? assert_equal mask, File.stat(installed_exec).mode unless win_platform?
wrapper = File.read installed_exec wrapper = File.read installed_exec
@ -287,7 +287,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
assert File.directory? util_inst_bindir assert File.directory? util_inst_bindir
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert File.exist? installed_exec assert_path_exists installed_exec
assert_equal mask, File.stat(installed_exec).mode unless win_platform? assert_equal mask, File.stat(installed_exec).mode unless win_platform?
wrapper = File.read installed_exec wrapper = File.read installed_exec
@ -304,7 +304,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
assert_equal true, File.directory?(util_inst_bindir) assert_equal true, File.directory?(util_inst_bindir)
installed_exec = File.join util_inst_bindir, 'foo-executable-bar' installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
assert_equal true, File.exist?(installed_exec) assert_path_exists installed_exec
ensure ensure
Gem::Installer.exec_format = nil Gem::Installer.exec_format = nil
end end
@ -318,7 +318,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
assert_equal true, File.directory?(util_inst_bindir) assert_equal true, File.directory?(util_inst_bindir)
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert_equal true, File.exist?(installed_exec) assert_path_exists installed_exec
ensure ensure
Gem::Installer.exec_format = nil Gem::Installer.exec_format = nil
end end
@ -340,7 +340,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
installed_exec = File.join("#{@gemhome}2", "bin", 'executable') installed_exec = File.join("#{@gemhome}2", "bin", 'executable')
assert File.exist? installed_exec assert_path_exists installed_exec
assert_equal mask, File.stat(installed_exec).mode unless win_platform? assert_equal mask, File.stat(installed_exec).mode unless win_platform?
wrapper = File.read installed_exec wrapper = File.read installed_exec
@ -353,7 +353,7 @@ gem 'other', version
@installer.wrappers = true @installer.wrappers = true
@installer.generate_bin @installer.generate_bin
refute File.exist?(util_inst_bindir), 'bin dir was created when not needed' refute_path_exists util_inst_bindir, 'bin dir was created when not needed'
end end
def test_generate_bin_script_no_perms def test_generate_bin_script_no_perms
@ -389,7 +389,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
installed_exec = File.join @gemhome, 'bin', 'executable' installed_exec = File.join @gemhome, 'bin', 'executable'
assert_equal true, File.exist?(installed_exec) assert_path_exists installed_exec
assert_equal mask, File.stat(installed_exec).mode unless win_platform? assert_equal mask, File.stat(installed_exec).mode unless win_platform?
wrapper = File.read installed_exec wrapper = File.read installed_exec
@ -414,7 +414,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
assert_equal true, File.directory?(util_inst_bindir) assert_equal true, File.directory?(util_inst_bindir)
assert_equal true, File.exist?(installed_exec) assert_path_exists installed_exec
assert_equal mask, File.stat(installed_exec).mode unless win_platform? assert_equal mask, File.stat(installed_exec).mode unless win_platform?
assert_match %r|generated by RubyGems|, File.read(installed_exec) assert_match %r|generated by RubyGems|, File.read(installed_exec)
@ -444,7 +444,7 @@ gem 'other', version
@installer.wrappers = false @installer.wrappers = false
@installer.generate_bin @installer.generate_bin
refute File.exist?(util_inst_bindir) refute_path_exists util_inst_bindir
end end
def test_generate_bin_symlink_no_perms def test_generate_bin_symlink_no_perms
@ -543,7 +543,7 @@ gem 'other', version
@installer.generate_bin @installer.generate_bin
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert File.exist? installed_exec assert_path_exists installed_exec
@spec = Gem::Specification.new do |s| @spec = Gem::Specification.new do |s|
s.files = ['lib/code.rb'] s.files = ['lib/code.rb']
@ -580,7 +580,7 @@ gem 'other', version
assert_equal true, File.directory?(util_inst_bindir) assert_equal true, File.directory?(util_inst_bindir)
installed_exec = File.join(util_inst_bindir, 'executable') installed_exec = File.join(util_inst_bindir, 'executable')
assert_equal true, File.exist?(installed_exec) assert_path_exists installed_exec
assert_match(/Unable to use symlinks on Windows, installing wrapper/i, assert_match(/Unable to use symlinks on Windows, installing wrapper/i,
@ui.error) @ui.error)
@ -647,19 +647,19 @@ gem 'other', version
rakefile = File.join gemdir, 'ext', 'a', 'Rakefile' rakefile = File.join gemdir, 'ext', 'a', 'Rakefile'
Gem.pre_install do |installer| Gem.pre_install do |installer|
refute File.exist?(cache_file), 'cache file must not exist yet' refute_path_exists cache_file, 'cache file must not exist yet'
true true
end end
Gem.post_build do |installer| Gem.post_build do |installer|
assert File.exist?(gemdir), 'gem install dir must exist' assert_path_exists gemdir, 'gem install dir must exist'
assert File.exist?(rakefile), 'gem executable must exist' assert_path_exists rakefile, 'gem executable must exist'
refute File.exist?(stub_exe), 'gem executable must not exist' refute_path_exists stub_exe, 'gem executable must not exist'
true true
end end
Gem.post_install do |installer| Gem.post_install do |installer|
assert File.exist?(cache_file), 'cache file must exist' assert_path_exists cache_file, 'cache file must exist'
end end
@newspec = nil @newspec = nil
@ -670,23 +670,23 @@ gem 'other', version
end end
assert_equal @spec, @newspec assert_equal @spec, @newspec
assert File.exist? gemdir assert_path_exists gemdir
assert File.exist?(stub_exe), 'gem executable must exist' assert_path_exists stub_exe, 'gem executable must exist'
exe = File.join gemdir, 'bin', 'executable' exe = File.join gemdir, 'bin', 'executable'
assert File.exist? exe assert_path_exists exe
exe_mode = File.stat(exe).mode & 0111 exe_mode = File.stat(exe).mode & 0111
assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform? assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform?
assert File.exist?(File.join(gemdir, 'lib', 'code.rb')) assert_path_exists File.join gemdir, 'lib', 'code.rb'
assert File.exist? rakefile assert_path_exists rakefile
spec_file = File.join(@gemhome, 'specifications', @spec.spec_name) spec_file = File.join(@gemhome, 'specifications', @spec.spec_name)
assert_equal spec_file, @newspec.loaded_from assert_equal spec_file, @newspec.loaded_from
assert File.exist?(spec_file) assert_path_exists spec_file
assert_same @installer, @post_build_hook_arg assert_same @installer, @post_build_hook_arg
assert_same @installer, @post_install_hook_arg assert_same @installer, @post_install_hook_arg
@ -795,7 +795,7 @@ gem 'other', version
end end
gemdir = File.join(@gemhome, 'gems', @spec.full_name) gemdir = File.join(@gemhome, 'gems', @spec.full_name)
assert File.exist?(File.join(gemdir, 'lib', 'code.rb')) assert_path_exists File.join gemdir, 'lib', 'code.rb'
util_setup_gem util_setup_gem
# Morph spec to have lib/other.rb instead of code.rb and recreate # Morph spec to have lib/other.rb instead of code.rb and recreate
@ -814,9 +814,9 @@ gem 'other', version
end end
end end
assert File.exist?(File.join(gemdir, 'lib', 'other.rb')) assert_path_exists File.join gemdir, 'lib', 'other.rb'
refute(File.exist?(File.join(gemdir, 'lib', 'code.rb')), refute_path_exists File.join gemdir, 'lib', 'code.rb',
"code.rb from prior install of same gem shouldn't remain here") "code.rb from prior install of same gem shouldn't remain here"
end end
def test_install_force def test_install_force
@ -826,7 +826,7 @@ gem 'other', version
end end
gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1') gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
assert File.exist?(gem_dir) assert_path_exists gem_dir
end end
def test_install_missing_dirs def test_install_missing_dirs
@ -842,8 +842,8 @@ gem 'other', version
File.directory? File.join(Gem.dir, 'docs') File.directory? File.join(Gem.dir, 'docs')
File.directory? File.join(Gem.dir, 'specifications') File.directory? File.join(Gem.dir, 'specifications')
assert File.exist?(File.join(@gemhome, 'cache', @spec.file_name)) assert_path_exists File.join @gemhome, 'cache', @spec.file_name
assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name)) assert_path_exists File.join @gemhome, 'specifications', @spec.spec_name
end end
def test_install_post_build_false def test_install_post_build_false
@ -864,10 +864,10 @@ gem 'other', version
end end
spec_file = File.join @gemhome, 'specifications', @spec.spec_name spec_file = File.join @gemhome, 'specifications', @spec.spec_name
refute File.exist? spec_file refute_path_exists spec_file
gem_dir = File.join @gemhome, 'gems', @spec.full_name gem_dir = File.join @gemhome, 'gems', @spec.full_name
refute File.exist? gem_dir refute_path_exists gem_dir
end end
def test_install_post_build_nil def test_install_post_build_nil
@ -882,10 +882,10 @@ gem 'other', version
end end
spec_file = File.join @gemhome, 'specifications', @spec.spec_name spec_file = File.join @gemhome, 'specifications', @spec.spec_name
assert File.exist? spec_file assert_path_exists spec_file
gem_dir = File.join @gemhome, 'gems', @spec.full_name gem_dir = File.join @gemhome, 'gems', @spec.full_name
assert File.exist? gem_dir assert_path_exists gem_dir
end end
def test_install_pre_install_false def test_install_pre_install_false
@ -906,7 +906,7 @@ gem 'other', version
end end
spec_file = File.join @gemhome, 'specifications', @spec.spec_name spec_file = File.join @gemhome, 'specifications', @spec.spec_name
refute File.exist? spec_file refute_path_exists spec_file
end end
def test_install_pre_install_nil def test_install_pre_install_nil
@ -921,7 +921,7 @@ gem 'other', version
end end
spec_file = File.join @gemhome, 'specifications', @spec.spec_name spec_file = File.join @gemhome, 'specifications', @spec.spec_name
assert File.exist? spec_file assert_path_exists spec_file
end end
def test_install_with_message def test_install_with_message
@ -937,6 +937,31 @@ gem 'other', version
assert_match %r|I am a shiny gem!|, @ui.output assert_match %r|I am a shiny gem!|, @ui.output
end end
def test_install_extension_install_dir
gemhome2 = "#{@gemhome}2"
@spec.extensions << "extconf.rb"
write_file File.join(@tempdir, "extconf.rb") do |io|
io.write <<-RUBY
require "mkmf"
create_makefile("#{@spec.name}")
RUBY
end
@spec.files += %w[extconf.rb]
use_ui @ui do
path = Gem::Package.build @spec
installer = Gem::Installer.new path, :install_dir => gemhome2
installer.install
end
expected_makefile = File.join gemhome2, 'gems', @spec.full_name, 'Makefile'
assert_path_exists expected_makefile
end
def test_install_extension_and_script def test_install_extension_and_script
@spec.extensions << "extconf.rb" @spec.extensions << "extconf.rb"
write_file File.join(@tempdir, "extconf.rb") do |io| write_file File.join(@tempdir, "extconf.rb") do |io|
@ -963,16 +988,16 @@ gem 'other', version
RUBY RUBY
end end
assert !File.exist?(File.join(@spec.gem_dir, rb)) refute_path_exists File.join @spec.gem_dir, rb
assert !File.exist?(File.join(@spec.gem_dir, rb2)) refute_path_exists File.join @spec.gem_dir, rb2
use_ui @ui do use_ui @ui do
path = Gem::Package.build @spec path = Gem::Package.build @spec
@installer = Gem::Installer.new path @installer = Gem::Installer.new path
@installer.install @installer.install
end end
assert File.exist?(File.join(@spec.gem_dir, rb)) assert_path_exists File.join @spec.gem_dir, rb
assert File.exist?(File.join(@spec.gem_dir, rb2)) assert_path_exists File.join @spec.gem_dir, rb2
end end
def test_install_extension_flat def test_install_extension_flat
@ -1001,14 +1026,14 @@ gem 'other', version
} }
so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}") so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
assert !File.exist?(so) refute_path_exists so
use_ui @ui do use_ui @ui do
path = Gem::Package.build @spec path = Gem::Package.build @spec
@installer = Gem::Installer.new path @installer = Gem::Installer.new path
@installer.install @installer.install
end end
assert File.exist?(so) assert_path_exists so
rescue rescue
puts '-' * 78 puts '-' * 78
puts File.read File.join(@gemhome, 'gems', 'a-2', 'Makefile') puts File.read File.join(@gemhome, 'gems', 'a-2', 'Makefile')
@ -1253,8 +1278,8 @@ gem 'other', version
@installer.unpack dest @installer.unpack dest
assert File.exist?(File.join(dest, 'lib', 'code.rb')) assert_path_exists File.join dest, 'lib', 'code.rb'
assert File.exist?(File.join(dest, 'bin', 'executable')) assert_path_exists File.join dest, 'bin', 'executable'
end end
def test_write_build_info_file def test_write_build_info_file
@ -1313,20 +1338,20 @@ gem 'other', version
def test_write_spec def test_write_spec
FileUtils.rm @spec.spec_file FileUtils.rm @spec.spec_file
refute File.exist?(@spec.spec_file) refute_path_exists @spec.spec_file
@installer.spec = @spec @installer.spec = @spec
@installer.gem_home = @gemhome @installer.gem_home = @gemhome
@installer.write_spec @installer.write_spec
assert File.exist?(@spec.spec_file) assert_path_exists @spec.spec_file
assert_equal @spec, eval(File.read(@spec.spec_file)) assert_equal @spec, eval(File.read(@spec.spec_file))
end end
def test_write_spec_writes_cached_spec def test_write_spec_writes_cached_spec
FileUtils.rm @spec.spec_file FileUtils.rm @spec.spec_file
refute File.exist?(@spec.spec_file) refute_path_exists @spec.spec_file
@spec.files = %w[a.rb b.rb c.rb] @spec.files = %w[a.rb b.rb c.rb]
@ -1359,7 +1384,7 @@ gem 'other', version
assert File.directory? util_inst_bindir assert File.directory? util_inst_bindir
installed_exec = File.join util_inst_bindir, 'executable' installed_exec = File.join util_inst_bindir, 'executable'
assert File.exist? installed_exec assert_path_exists installed_exec
assert File.directory? File.join(Gem.dir, 'specifications') assert File.directory? File.join(Gem.dir, 'specifications')
assert File.directory? File.join(Gem.dir, 'specifications', 'default') assert File.directory? File.join(Gem.dir, 'specifications', 'default')

View file

@ -396,6 +396,19 @@ class TestGemPackage < Gem::Package::TarTestCase
"#{@destination} is not allowed", e.message) "#{@destination} is not allowed", e.message)
end end
def test_extract_tar_gz_dot_slash
package = Gem::Package.new @gem
tgz_io = util_tar_gz do |tar|
tar.add_file './dot_slash.rb', 0644 do |io| io.write 'hi' end
end
package.extract_tar_gz tgz_io, @destination
extracted = File.join @destination, 'dot_slash.rb'
assert_path_exists extracted
end
def test_install_location def test_install_location
package = Gem::Package.new @gem package = Gem::Package.new @gem