[rubygems/rubygems] Fix manifest in gem package using incorrect platform sometimes
If a gem package is built from a specification whose platform has been modified, it will include metadata using the old platform. This change should fix the problem by making sure `original_platform` is always properly set. https://github.com/rubygems/rubygems/commit/ecd5cd4547
This commit is contained in:
parent
8c184885b0
commit
350baed6a9
@ -464,10 +464,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||
# spec.platform = Gem::Platform.local
|
||||
|
||||
def platform=(platform)
|
||||
if @original_platform.nil? ||
|
||||
@original_platform == Gem::Platform::RUBY
|
||||
@original_platform = platform
|
||||
end
|
||||
@original_platform = platform
|
||||
|
||||
case platform
|
||||
when Gem::Platform::CURRENT then
|
||||
@ -1308,7 +1305,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||
spec.instance_variable_set :@summary, array[5]
|
||||
spec.instance_variable_set :@required_ruby_version, array[6]
|
||||
spec.instance_variable_set :@required_rubygems_version, array[7]
|
||||
spec.instance_variable_set :@original_platform, array[8]
|
||||
spec.platform = array[8]
|
||||
spec.instance_variable_set :@dependencies, array[9]
|
||||
# offset due to rubyforge_project removal
|
||||
spec.instance_variable_set :@email, array[11]
|
||||
@ -1316,8 +1313,6 @@ class Gem::Specification < Gem::BasicSpecification
|
||||
spec.instance_variable_set :@description, array[13]
|
||||
spec.instance_variable_set :@homepage, array[14]
|
||||
spec.instance_variable_set :@has_rdoc, array[15]
|
||||
spec.instance_variable_set :@new_platform, array[16]
|
||||
spec.instance_variable_set :@platform, array[16].to_s
|
||||
spec.instance_variable_set :@licenses, [array[17]]
|
||||
spec.instance_variable_set :@metadata, array[18]
|
||||
spec.instance_variable_set :@loaded, false
|
||||
@ -1813,15 +1808,16 @@ class Gem::Specification < Gem::BasicSpecification
|
||||
def encode_with(coder) # :nodoc:
|
||||
coder.add "name", @name
|
||||
coder.add "version", @version
|
||||
platform = case @original_platform
|
||||
platform = case @new_platform
|
||||
when nil, "" then
|
||||
"ruby"
|
||||
when String then
|
||||
@original_platform
|
||||
@new_platform
|
||||
else
|
||||
@original_platform.to_s
|
||||
@new_platform.to_s
|
||||
end
|
||||
coder.add "platform", platform
|
||||
coder.add "original_platform", @original_platform.to_s if platform != @original_platform.to_s
|
||||
|
||||
attributes = @@attributes.map(&:to_s) - %w[name version platform]
|
||||
attributes.each do |name|
|
||||
@ -2626,13 +2622,12 @@ class Gem::Specification < Gem::BasicSpecification
|
||||
when "date"
|
||||
# Force Date to go through the extra coerce logic in date=
|
||||
self.date = val
|
||||
when "platform"
|
||||
self.platform = val
|
||||
else
|
||||
instance_variable_set "@#{ivar}", val
|
||||
end
|
||||
end
|
||||
|
||||
@original_platform = @platform # for backwards compatibility
|
||||
self.platform = Gem::Platform.new @platform
|
||||
end
|
||||
|
||||
##
|
||||
|
@ -438,6 +438,33 @@ class TestGemPackage < Gem::Package::TarTestCase
|
||||
assert_equal %w[lib/code.rb], reader.contents
|
||||
end
|
||||
|
||||
def test_build_modified_platform
|
||||
spec = quick_gem "a", "1" do |s|
|
||||
s.files = %w[lib/code.rb]
|
||||
s.platform = Gem::Platform.new "x86_64-linux"
|
||||
end
|
||||
|
||||
spec.platform = Gem::Platform.new "java"
|
||||
|
||||
FileUtils.mkdir "lib"
|
||||
|
||||
File.open "lib/code.rb", "w" do |io|
|
||||
io.write "# lib/code.rb"
|
||||
end
|
||||
|
||||
package = Gem::Package.new spec.file_name
|
||||
package.spec = spec
|
||||
|
||||
package.build
|
||||
|
||||
assert_path_exist spec.file_name
|
||||
|
||||
reader = Gem::Package.new spec.file_name
|
||||
assert reader.verify
|
||||
|
||||
assert_equal spec, reader.spec
|
||||
end
|
||||
|
||||
def test_raw_spec
|
||||
data_tgz = util_tar_gz {}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user