2018-11-02 19:07:56 -04:00
# frozen_string_literal: true
2019-06-01 05:49:40 -04:00
require_relative " vendored_thor "
2018-11-02 19:07:56 -04:00
module Bundler
module FriendlyErrors
2019-07-31 17:56:05 -04:00
module_function
2018-11-02 19:07:56 -04:00
def log_error ( error )
case error
when YamlSyntaxError
Bundler . ui . error error . message
Bundler . ui . trace error . orig_exception
when Dsl :: DSLError , GemspecError
Bundler . ui . error error . message
when GemRequireError
Bundler . ui . error error . message
2019-11-11 03:57:45 -05:00
Bundler . ui . trace error . orig_exception
2018-11-02 19:07:56 -04:00
when BundlerError
Bundler . ui . error error . message , :wrap = > true
Bundler . ui . trace error
when Thor :: Error
Bundler . ui . error error . message
when LoadError
raise error unless error . message =~ / cannot load such file -- openssl|openssl.so|libcrypto.so /
2020-05-08 01:19:04 -04:00
Bundler . ui . error " \n Could not load OpenSSL. #{ error . class } : #{ error } \n #{ error . backtrace . join ( " \n " ) } "
2018-11-02 19:07:56 -04:00
when Interrupt
Bundler . ui . error " \n Quitting... "
Bundler . ui . trace error
when Gem :: InvalidSpecificationException
Bundler . ui . error error . message , :wrap = > true
when SystemExit
when * [ defined? ( Java :: JavaLang :: OutOfMemoryError ) && Java :: JavaLang :: OutOfMemoryError ] . compact
Bundler . ui . error " \n Your JVM has run out of memory, and Bundler cannot continue. " \
" You can decrease the amount of memory Bundler needs by removing gems from your Gemfile, " \
" especially large gems. (Gems can be as large as hundreds of megabytes, and Bundler has to read those files!). " \
" Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB). "
else request_issue_report_for ( error )
end
2019-04-14 02:01:35 -04:00
rescue StandardError
2018-11-02 19:07:56 -04:00
raise error
end
def exit_status ( error )
case error
when BundlerError then error . status_code
when Thor :: Error then 15
when SystemExit then error . status
else 1
end
end
def request_issue_report_for ( e )
Bundler . ui . info <<-EOS.gsub(/^ {8}/, "")
- - - ERROR REPORT TEMPLATE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Error Report
## Questions
Please fill out answers to these questions , it ' ll help us figure out
why things are going wrong .
- ** What did you do ?* *
I ran the command ` #{ $PROGRAM_NAME } #{ ARGV . join ( " " ) } `
- ** What did you expect to happen? **
I expected Bundler to ...
- ** What happened instead? **
Instead , what happened was ...
- ** Have you tried any solutions posted on similar issues in our issue tracker , stack overflow , or google? **
I tried ...
2020-05-07 14:02:21 -04:00
- ** Have you read our issues document , https : / / github . com / rubygems / rubygems / blob / master / bundler / doc / contributing / ISSUES . md? **
2018-11-02 19:07:56 -04:00
...
## Backtrace
` ` `
#{e.class}: #{e.message}
#{e.backtrace && e.backtrace.join("\n ").chomp}
` ` `
#{Bundler::Env.report}
- - - TEMPLATE END - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EOS
Bundler . ui . error " Unfortunately, an unexpected error occurred, and Bundler cannot continue. "
Bundler . ui . warn <<-EOS.gsub(/^ {8}/, "")
First , try this link to see if there are any existing issue reports for this error :
#{issues_url(e)}
If there aren 't any reports for this error yet, please create copy and paste the report template above into a new issue. Don' t forget to anonymize any private data! The new issue form is located at :
2020-05-07 14:02:21 -04:00
https : / / github . com / rubygems / rubygems / issues / new ? labels = Bundler
2018-11-02 19:07:56 -04:00
EOS
end
def issues_url ( exception )
message = exception . message . lines . first . tr ( " : " , " " ) . chomp
message = message . split ( " - " ) . first if exception . is_a? ( Errno )
2019-12-14 05:49:16 -05:00
require " cgi "
2020-05-15 08:31:12 -04:00
" https://github.com/rubygems/rubygems/search?q= " \
2018-11-02 19:07:56 -04:00
" #{ CGI . escape ( message ) } &type=Issues "
end
end
def self . with_friendly_errors
yield
rescue SignalException
raise
2019-04-14 02:01:35 -04:00
rescue Exception = > e # rubocop:disable Lint/RescueException
2018-11-02 19:07:56 -04:00
FriendlyErrors . log_error ( e )
exit FriendlyErrors . exit_status ( e )
end
end