mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[rubygems/rubygems] Don't on gemspecs with invalid require_paths
, just warn
These gemspecs already work most of the times. When they are installed
normally, the require_paths in the gemspec stub line becomes actually
correct, and the incorrect value in the real gemspec is ignored. It only
becomes an issue in standalone mode.
In Ruby 3.2, `Kernel#=~` has been removed, and that means that it
becomes harder for us to gracefully deal with this error in standalone
mode, because it now happens earlier due to calling `Array#=~` for this
invalid gemspec (since require_paths is incorrectly an array of arrays).
The easiest way to fix this is to actually make this just work instead
by automatically fixing the issue when reading the packaged gemspec.
d3f2fe6d26
This commit is contained in:
parent
28e27ee76e
commit
d0bf31e6cf
2 changed files with 19 additions and 1 deletions
|
@ -1081,6 +1081,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
spec.specification_version ||= NONEXISTENT_SPECIFICATION_VERSION
|
spec.specification_version ||= NONEXISTENT_SPECIFICATION_VERSION
|
||||||
spec.reset_nil_attributes_to_default
|
spec.reset_nil_attributes_to_default
|
||||||
|
spec.flatten_require_paths
|
||||||
|
|
||||||
spec
|
spec
|
||||||
end
|
end
|
||||||
|
@ -2674,6 +2675,13 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
@installed_by_version ||= nil
|
@installed_by_version ||= nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def flatten_require_paths # :nodoc:
|
||||||
|
return unless raw_require_paths.first.is_a?(Array)
|
||||||
|
|
||||||
|
warn "#{name} #{version} includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this"
|
||||||
|
raw_require_paths.flatten!
|
||||||
|
end
|
||||||
|
|
||||||
def raw_require_paths # :nodoc:
|
def raw_require_paths # :nodoc:
|
||||||
@require_paths
|
@require_paths
|
||||||
end
|
end
|
||||||
|
|
|
@ -196,7 +196,7 @@ RSpec.describe "real world edgecases", :realworld => true do
|
||||||
expect(lockfile).to include(rubygems_version("paperclip", "~> 5.1.0"))
|
expect(lockfile).to include(rubygems_version("paperclip", "~> 5.1.0"))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "outputs a helpful error message when gems have invalid gemspecs" do
|
it "outputs a helpful error message when gems have invalid gemspecs", :rubygems => "< 3.3.16" do
|
||||||
install_gemfile <<-G, :standalone => true, :raise_on_error => false, :env => { "BUNDLE_FORCE_RUBY_PLATFORM" => "1" }
|
install_gemfile <<-G, :standalone => true, :raise_on_error => false, :env => { "BUNDLE_FORCE_RUBY_PLATFORM" => "1" }
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
gem "resque-scheduler", "2.2.0"
|
gem "resque-scheduler", "2.2.0"
|
||||||
|
@ -207,6 +207,16 @@ RSpec.describe "real world edgecases", :realworld => true do
|
||||||
expect(err).to include("resque-scheduler 2.2.0 has an invalid gemspec")
|
expect(err).to include("resque-scheduler 2.2.0 has an invalid gemspec")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "outputs a helpful warning when gems have a gemspec with invalid `require_paths`", :rubygems => ">= 3.3.16" do
|
||||||
|
install_gemfile <<-G, :standalone => true, :env => { "BUNDLE_FORCE_RUBY_PLATFORM" => "1" }
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
gem "resque-scheduler", "2.2.0"
|
||||||
|
gem "redis-namespace", "1.6.0" # for a consistent resolution including ruby 2.3.0
|
||||||
|
gem "ruby2_keywords", "0.0.5"
|
||||||
|
G
|
||||||
|
expect(err).to include("resque-scheduler 2.2.0 includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this").once
|
||||||
|
end
|
||||||
|
|
||||||
it "doesn't hang on big gemfile" do
|
it "doesn't hang on big gemfile" do
|
||||||
skip "Only for ruby 2.7.3" if RUBY_VERSION != "2.7.3" || RUBY_PLATFORM =~ /darwin/
|
skip "Only for ruby 2.7.3" if RUBY_VERSION != "2.7.3" || RUBY_PLATFORM =~ /darwin/
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue