Class: Commander::Runner
- Inherits:
-
Object
- Object
- Commander::Runner
- Defined in:
- lib/fastlane_core/ui/fastlane_runner.rb
Overview
This class override the run method with our custom stack trace handling In particular we want to distinguish between user_error! and crash! (one with, one without stack trace)
Instance Method Summary collapse
- #display_user_error!(e, message) ⇒ Object
- #handle_unknown_error!(e) ⇒ Object
- #reraise_formatted!(e, message) ⇒ Object
- #run! ⇒ Object
Instance Method Details
#display_user_error!(e, message) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/fastlane_core/ui/fastlane_runner.rb', line 64 def display_user_error!(e, ) if $verbose # with stack trace reraise_formatted!(e, ) else abort "\n[!] #{}".red # without stack trace end end |
#handle_unknown_error!(e) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/fastlane_core/ui/fastlane_runner.rb', line 45 def handle_unknown_error!(e) # Some spaceship exception classes implement #preferred_error_info in order to share error info # that we'd rather display instead of crashing with a stack trace. However, fastlane_core and # spaceship can not know about each other's classes! To make this information passing work, we # use a bit of Ruby duck-typing to check whether the unknown exception type implements the right # method. If so, we'll present any returned error info in the manner of a user_error! error_info = e.respond_to?(:preferred_error_info) ? e.preferred_error_info : nil if error_info error_info = error_info.join("\n\t") if error_info.kind_of?(Array) display_user_error!(e, error_info) else FastlaneCore::CrashReporting.handle_crash(e) # From https://stackoverflow.com/a/4789702/445598 # We do this to make the actual error message red and therefore more visible reraise_formatted!(e, e.) end end |
#reraise_formatted!(e, message) ⇒ Object
72 73 74 |
# File 'lib/fastlane_core/ui/fastlane_runner.rb', line 72 def reraise_formatted!(e, ) raise e, "[!] #{}".red, e.backtrace end |
#run! ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/fastlane_core/ui/fastlane_runner.rb', line 6 def run! require_program :version, :description trap('INT') { abort program(:int_message) } if program(:int_message) trap('INT') { program(:int_block).call } if program(:int_block) global_option('-h', '--help', 'Display help documentation') do args = @args - %w(-h --help) command(:help).run(*args) return end global_option('-v', '--version', 'Display version information') do say version return end , @args begin run_active_command rescue InvalidCommandError => e abort "#{e}. Use --help for more information" rescue Interrupt => ex # We catch it so that the stack trace is hidden by default when using ctrl + c if $verbose raise ex else puts "\nCancelled... use --verbose to show the stack trace" end rescue \ OptionParser::InvalidOption, OptionParser::InvalidArgument, OptionParser::MissingArgument => e abort e.to_s rescue FastlaneCore::Interface::FastlaneError => e # user_error! display_user_error!(e, e.) rescue => e # high chance this is actually FastlaneCore::Interface::FastlaneCrash, but can be anything else handle_unknown_error!(e) end end |