joshelser commented on a change in pull request #3901: URL: https://github.com/apache/hbase/pull/3901#discussion_r780597564
########## File path: hbase-shell/src/main/ruby/jar-bootstrap.rb ########## @@ -183,61 +183,47 @@ def debug? # instance variables (@hbase and @shell) onto Ruby's top-level receiver object known as "main". @shell.export_all(self) if top_level_definitions +require 'irb' +require 'irb/ext/change-ws' +require 'irb/hirb' + +# Configure IRB +IRB.setup(nil) +IRB.conf[:PROMPT][:CUSTOM] = { + :PROMPT_I => "%N:%03n:%i> ", + :PROMPT_S => "%N:%03n:%i%l ", + :PROMPT_C => "%N:%03n:%i* ", + :RETURN => "=> %s\n" +} + +IRB.conf[:IRB_NAME] = 'hbase' +IRB.conf[:AP_NAME] = 'hbase' +IRB.conf[:PROMPT_MODE] = :CUSTOM +IRB.conf[:BACK_TRACE_LIMIT] = 0 unless $fullBackTrace + +# Create a workspace we'll use across sessions. +workspace = @shell.get_workspace + # If script2run, try running it. If we're in interactive mode, will go on to run the shell unless # script calls 'exit' or 'exit 0' or 'exit errcode'. -require 'shell/hbase_loader' if script2run - ::Shell::Shell.exception_handler(!$fullBackTrace) { @shell.eval_io(Hbase::Loader.file_for_load(script2run), filename = script2run) } + ::Shell::Shell.exception_handler(!$fullBackTrace) do + IRB::HIRB.new(workspace, IRB::HBaseLoader.file_for_load(script2run)).run + end + unless @shell.exit_code.nil? + if interactive + exit + else + exit @shell.exit_code + end + end end -# If we are not running interactively, evaluate standard input -::Shell::Shell.exception_handler(!$fullBackTrace) { @shell.eval_io(STDIN) } unless interactive - if interactive # Output a banner message that tells users where to go for help @shell.print_banner - - require 'irb' - require 'irb/ext/change-ws' - require 'irb/hirb' - - module IRB - # Override of the default IRB.start - def self.start(ap_path = nil) - $0 = File.basename(ap_path, '.rb') if ap_path - - IRB.setup(ap_path) - IRB.conf[:PROMPT][:CUSTOM] = { - :PROMPT_I => "%N:%03n:%i> ", - :PROMPT_S => "%N:%03n:%i%l ", - :PROMPT_C => "%N:%03n:%i* ", - :RETURN => "=> %s\n" - } - - @CONF[:IRB_NAME] = 'hbase' - @CONF[:AP_NAME] = 'hbase' - @CONF[:PROMPT_MODE] = :CUSTOM - @CONF[:BACK_TRACE_LIMIT] = 0 unless $fullBackTrace - - hirb = if @CONF[:SCRIPT] - HIRB.new(nil, @CONF[:SCRIPT]) - else - HIRB.new - end - - shl = TOPLEVEL_BINDING.receiver.instance_variable_get :'@shell' - hirb.context.change_workspace shl.get_workspace - - @CONF[:IRB_RC].call(hirb.context) if @CONF[:IRB_RC] - # Storing our current HBase IRB Context as the main context is imperative for several reasons, - # including auto-completion. - @CONF[:MAIN_CONTEXT] = hirb.context - - catch(:IRB_EXIT) do - hirb.eval_input - end - end - end - - IRB.start +end +IRB::HIRB.new(workspace).run +unless interactive or @shell.exit_code.nil? Review comment: Not something you changed in this PR, but I wonder if `exit_code` is ever `nil?`. Seems like, if so, that'd a bug. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@hbase.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org