Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bundle platform crash when there's a lockfile with no Ruby locked #5850

Merged
merged 1 commit into from
Aug 21, 2022

Conversation

deivid-rodriguez
Copy link
Member

@deivid-rodriguez deivid-rodriguez commented Aug 19, 2022

What was the end-user or developer problem that led to this PR?

bundle platform now crashes in presence of a lockfile without RUBY VERSION section. That is, many times.

It crashes like this

       Invoking `/Users/deivid/.asdf/installs/ruby/3.1.2/bin/ruby -I/Users/deivid/Code/rubygems/rubygems/bundler/spec -r/Users/deivid/Code/rubygems/rubygems/bundler/spec/support/artifice/fail.rb -r/Users/deivid/Code/rubygems/rubygems/bundler/spec/support/hax.rb /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/bin/bundle platform --ruby` failed with output:
       ----------------------------------------------------------------------
       --- ERROR REPORT TEMPLATE -------------------------------------------------------
     
       ```
       NoMethodError: undefined method `gsub' for nil:NilClass
     
       locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version.gsub(/p\d+\Z/, "")
                                                                            ^^^^^
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/cli/platform.rb:12:in `block in run'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/ui/shell.rb:136:in `with_level'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/ui/shell.rb:88:in `silence'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/cli/platform.rb:11:in `run'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/cli.rb:633:in `platform'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/cli.rb:31:in `dispatch'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/cli.rb:25:in `start'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/exe/bundle:48:in `block in <top (required)>'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/gems/bundler-2.4.0.dev/exe/bundle:36:in `<top (required)>'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/bin/bundle:25:in `load'
         /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/bin/bundle:25:in `<main>'
     
       ```
     
       ## Environment
     
       ```
       Bundler       2.4.0.dev
         Platforms   ruby, arm64-darwin-21
       Ruby          3.1.2p20 (2022-04-12 revision 4491bb740a9506d76391ac44bb2fe6e483fec952) [arm64-darwin-21]
         Full Path   /Users/deivid/.asdf/installs/ruby/3.1.2/bin/ruby
         Config Dir  /Users/deivid/.asdf/installs/ruby/3.1.2/etc
       RubyGems      3.3.20
         Gem Home    /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system
         Gem Path    /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system
         User Home   /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/home
         User Path   /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/home/.local/share/gem/ruby/3.1.0
         Bin Dir     /Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/system/bin
       OpenSSL       
         Compiled    OpenSSL 1.1.1n  15 Mar 2022
         Loaded      OpenSSL 1.1.1n  15 Mar 2022
         Cert File   /Users/deivid/.asdf/installs/ruby/3.1.2/openssl/ssl/cert.pem
         Cert Dir    /Users/deivid/.asdf/installs/ruby/3.1.2/openssl/ssl/certs
       Tools         
         Git         2.32.1 (Apple Git-133)
         RVM         not installed
         rbenv       not installed
         chruby      not installed
       ```
     
       ## Bundler Build Metadata
     
       ```
       Built At          2022-08-19
       Git SHA           f8c76eae24
       Released Version  true
       ```
     
       ## Gemfile
     
       ### Gemfile
     
       ```ruby
       source "file:///Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/remote1"
       ```
     
       ### Gemfile.lock
     
       ```
       GEM
         remote: file:///Users/deivid/Code/rubygems/rubygems/bundler/tmp/1/gems/remote1/
         specs:
     
       PLATFORMS
         ruby
     
       DEPENDENCIES
     
       BUNDLED WITH
          2.4.0.dev
       ```
     
       --- TEMPLATE END ----------------------------------------------------------------
     
       Unfortunately, an unexpected error occurred, and Bundler cannot continue.
     
       First, try this link to see if there are any existing issue reports for this error:
       https://github.com/rubygems/rubygems/search?q=undefined+method+%60gsub%27+for+nil+NilClass&type=Issues
     
       If there aren't any reports for this error yet, please fill in the new issue form located at https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md, and copy and paste the report template above in there.

What is your fix for the problem, implemented in this PR?

My fix is to check whether there's no locked Ruby version before trying to do manipulations on it.

This is a regression introduced in Bundler 2.3.20 (by #5793 in particular).

Make sure the following tasks are checked

@deivid-rodriguez deivid-rodriguez merged commit 9b90bb3 into master Aug 21, 2022
@deivid-rodriguez deivid-rodriguez deleted the fix-bundle-platform-crash branch August 21, 2022 08:53
deivid-rodriguez added a commit that referenced this pull request Aug 24, 2022
Fix `bundle platform` crash when there's a lockfile with no Ruby locked

(cherry picked from commit 9b90bb3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant