summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-03-07 11:24:48 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-03-07 11:24:48 +0000
commit4c1952f4bf9d2fe183431747a83596287e9b7631 (patch)
tree94b238b32f569bae8bd734c691aa6fd1d569718a
parent8cc53044081fa00384412a0f141c9f1be9065e1a (diff)
Ignore to handle the different platform
When `GEM_HOME` was shared with CRuby and JRuby. RubyGems try to handle both platforms. It should be ignored the different platform. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--lib/rubygems/basic_specification.rb7
-rw-r--r--lib/rubygems/commands/pristine_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_pristine_command.rb41
-rw-r--r--test/rubygems/test_gem_specification.rb14
4 files changed, 61 insertions, 3 deletions
diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb
index edb38cb1c2..45a6fc08a0 100644
--- a/lib/rubygems/basic_specification.rb
+++ b/lib/rubygems/basic_specification.rb
@@ -71,8 +71,11 @@ class Gem::BasicSpecification
elsif missing_extensions?
@ignored = true
- warn "Ignoring #{full_name} because its extensions are not built. " +
- "Try: gem pristine #{name} --version #{version}"
+ if platform == RUBY_ENGINE
+ warn "Ignoring #{full_name} because its extensions are not built. " +
+ "Try: gem pristine #{name} --version #{version}"
+ end
+
return false
end
diff --git a/lib/rubygems/commands/pristine_command.rb b/lib/rubygems/commands/pristine_command.rb
index 1d0eb61700..95e9ed0a15 100644
--- a/lib/rubygems/commands/pristine_command.rb
+++ b/lib/rubygems/commands/pristine_command.rb
@@ -104,6 +104,8 @@ extensions will be restored.
end.flatten
end
+ specs = specs.select{|spec| spec.platform == RUBY_ENGINE }
+
if specs.to_a.empty?
raise Gem::Exception,
"Failed to find gems #{options[:args]} #{options[:version]}"
diff --git a/test/rubygems/test_gem_commands_pristine_command.rb b/test/rubygems/test_gem_commands_pristine_command.rb
index c8e3bec88e..8df8e8a744 100644
--- a/test/rubygems/test_gem_commands_pristine_command.rb
+++ b/test/rubygems/test_gem_commands_pristine_command.rb
@@ -514,6 +514,47 @@ class TestGemCommandsPristineCommand < Gem::TestCase
assert_empty(@ui.error)
end
+ def test_execute_multi_platform
+ a = util_spec 'a' do |s|
+ s.extensions << 'ext/a/extconf.rb'
+ end
+
+ b = util_spec 'b' do |s|
+ s.extensions << 'ext/a/extconf.rb'
+ s.platform = Gem::Platform.new("java")
+ end
+
+ ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
+ write_file ext_path do |io|
+ io.write <<-'RUBY'
+ File.open "Makefile", "w" do |f|
+ f.puts "clean:\n\techo cleaned\n"
+ f.puts "all:\n\techo built\n"
+ f.puts "install:\n\techo installed\n"
+ end
+ RUBY
+ end
+
+ install_gem a
+ install_gem b
+
+ @cmd.options[:extensions] = true
+ @cmd.options[:extensions_set] = true
+ @cmd.options[:args] = []
+
+ use_ui @ui do
+ @cmd.execute
+ end
+
+ out = @ui.output.split "\n"
+
+ assert_equal 'Restoring gems to pristine condition...', out.shift
+ assert_equal 'Building native extensions. This could take a while...',
+ out.shift
+ assert_equal "Restored #{a.full_name}", out.shift
+ assert_empty out, out.inspect
+ end
+
def test_handle_options
@cmd.handle_options %w[]
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index 2a84d88346..0f00dd5d42 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -6,6 +6,7 @@ require 'stringio'
require 'rubygems/ext'
require 'rubygems/specification'
require 'rubygems/installer'
+require 'rubygems/platform'
class TestGemSpecification < Gem::TestCase
@@ -59,12 +60,13 @@ end
end
end
- def ext_spec
+ def ext_spec(platform: Gem::Platform::RUBY)
@ext = util_spec 'ext', '1' do |s|
s.executable = 'exec'
s.test_file = 'test/suite.rb'
s.extensions = %w[ext/extconf.rb]
s.license = 'MIT'
+ s.platform = platform
s.mark_version
s.files = %w[lib/code.rb]
@@ -1673,6 +1675,16 @@ dependencies: []
assert_equal expected, err
end
+ def test_contains_requirable_file_eh_extension
+ ext_spec(platform: Gem::Platform.new("java"))
+
+ _, err = capture_io do
+ refute @ext.contains_requirable_file? 'nonexistent'
+ end
+
+ assert_empty err
+ end
+
def test_date
assert_equal Gem::Specification::TODAY, @a1.date
end