HBASE-19770 Separate command return values from interactive shells

Uses a new option to the shell to specify that return values are
unwanted instead of overloading the interactive option. Enable
return_values when the shell is non-interactive.

Includes addendum "Replace `if not` with `unless`"

Signed-off-by: Apekshit Sharma <appy@apache.org>
Signed-off-by: Mike Drob <mdrob@apache.org>
This commit is contained in:
Josh Elser 2018-01-11 14:47:13 -05:00
parent 28ebd29f0f
commit 99306bba77
4 changed files with 20 additions and 6 deletions

View File

@ -59,12 +59,15 @@ Usage: shell [OPTIONS] [SCRIPTFILE [ARGUMENTS]]
-n | --noninteractive Do not run within an IRB session
and exit with non-zero status on
first error.
-r | --return-values Include return values from commands
executed in the shell.
HERE
found = []
script2run = nil
log_level = org.apache.log4j.Level::ERROR
@shell_debug = false
interactive = true
return_values = false
for arg in ARGV
if arg == '-h' || arg == '--help'
puts cmdline_help
@ -78,6 +81,9 @@ for arg in ARGV
elsif arg == '-n' || arg == '--noninteractive'
interactive = false
found.push(arg)
elsif arg == '-r' || arg == '--return-values'
return_values = true
found.push(arg)
else
# Presume it a script. Save it off for running later below
# after we've set up some environment.
@ -112,7 +118,7 @@ require 'shell/formatter'
@hbase = Hbase::Hbase.new
# Setup console
@shell = Shell::Shell.new(@hbase, interactive)
@shell = Shell::Shell.new(@hbase, interactive, return_values)
@shell.debug = @shell_debug
# Add commands to this namespace

View File

@ -71,14 +71,19 @@ module Shell
class Shell
attr_accessor :hbase
attr_accessor :interactive
attr_accessor :return_values
alias interactive? interactive
alias return_values? return_values
@debug = false
attr_accessor :debug
def initialize(hbase, interactive=true)
def initialize(hbase, interactive = true, return_values = !interactive)
self.hbase = hbase
self.interactive = interactive
self.return_values = return_values
# If we're in non-interactive mode, force return_values
self.return_values = true unless self.interactive
end
def hbase_admin
@ -133,9 +138,12 @@ module Shell
::Shell.commands[command.to_s].new(self)
end
#call the method 'command' on the specified command
# call the method 'command' on the specified command
# If return_values is false, then we suppress the return value. The command
# should have printed relevant output.
def command(command, *args)
internal_command(command, :command, *args)
ret = internal_command(command, :command, *args)
ret if return_values
end
# call a specific internal method in the command instance

View File

@ -20,7 +20,7 @@ require 'shell'
class NonInteractiveTest < Test::Unit::TestCase
def setup
@hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration)
@shell = Shell::Shell.new(@hbase, false)
@shell = Shell::Shell.new(@hbase, false, true)
end
define_test "Shell::Shell noninteractive mode should throw" do

View File

@ -43,7 +43,7 @@ module Hbase
def setup_hbase
hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration)
@shell = ::Shell::Shell.new(hbase)
@shell = ::Shell::Shell.new(hbase, interactive = false, return_values = true)
end
def shutdown