From b4f6ae86b669eb6377d8e17c9ff2753af8c74781 Mon Sep 17 00:00:00 2001 From: Josh Elser Date: Thu, 11 Jan 2018 14:47:13 -0500 Subject: [PATCH] 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. Signed-off-by: Apekshit Sharma --- bin/hirb.rb | 8 +++++++- hbase-shell/src/main/ruby/shell.rb | 18 +++++++++--------- .../src/test/ruby/shell/noninteractive_test.rb | 2 +- hbase-shell/src/test/ruby/test_helper.rb | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/bin/hirb.rb b/bin/hirb.rb index 35895f81f22..6e92d51eb99 100644 --- a/bin/hirb.rb +++ b/bin/hirb.rb @@ -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. @@ -110,7 +116,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 diff --git a/hbase-shell/src/main/ruby/shell.rb b/hbase-shell/src/main/ruby/shell.rb index a01a89052b2..4472021efea 100644 --- a/hbase-shell/src/main/ruby/shell.rb +++ b/hbase-shell/src/main/ruby/shell.rb @@ -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 if not self.interactive end # Returns Admin class from admin.rb @@ -135,16 +140,11 @@ module Shell end # call the method 'command' on the specified command - # If interactive is enabled, then we suppress the return value. The command should have - # printed relevant output. - # Return value is only useful in non-interactive mode, for e.g. tests. + # If return_values is false, then we suppress the return value. The command + # should have printed relevant output. def command(command, *args) ret = internal_command(command, :command, *args) - if interactive - return nil - else - return ret - end + ret if return_values end # call a specific internal method in the command instance diff --git a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb index 0fae4cbb79a..75a2c7dd219 100644 --- a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb +++ b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb @@ -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 diff --git a/hbase-shell/src/test/ruby/test_helper.rb b/hbase-shell/src/test/ruby/test_helper.rb index ec6bb6a55da..874b5549aed 100644 --- a/hbase-shell/src/test/ruby/test_helper.rb +++ b/hbase-shell/src/test/ruby/test_helper.rb @@ -43,7 +43,7 @@ module Hbase def setup_hbase hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration) - @shell = ::Shell::Shell.new(hbase, interactive = false) + @shell = ::Shell::Shell.new(hbase, interactive = false, return_values = true) end def shutdown