Repository: hbase
Updated Branches:
  refs/heads/branch-2.0 c9f3eb00a -> 5bf3b33a5


HBASE-20276 restore original shell REPL functionality where commands can return 
results

* makes commands always pass any results back to hirb
* print warning if hirb is given the --return-values flag
* add some docs on how to avoid the console clutter that HBASE-15965 sought to 
address
* add an upgrade section note about this change.
* cleanup where the get_splits command does its printing so there's a building 
block that doesn't print
* some rubocop suggested tweaks and opt-out for classlength check on table and 
shell classes.

Signed-off-by: Mike Drob <md...@apache.org>

 Conflicts:
        src/main/asciidoc/_chapters/upgrading.adoc

* backport leaves off refguide change about upgrading.


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5bf3b33a
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5bf3b33a
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5bf3b33a

Branch: refs/heads/branch-2.0
Commit: 5bf3b33a576f1c1fe20f18731457101ad88979eb
Parents: c9f3eb0
Author: Sean Busbey <bus...@apache.org>
Authored: Wed Apr 4 09:37:27 2018 -0500
Committer: Sean Busbey <bus...@apache.org>
Committed: Fri Apr 6 13:10:16 2018 -0500

----------------------------------------------------------------------
 bin/hirb.rb                                           |  8 +++-----
 hbase-shell/src/main/ruby/hbase/table.rb              | 13 ++++++++-----
 hbase-shell/src/main/ruby/shell.rb                    | 14 ++++----------
 .../src/main/ruby/shell/commands/get_splits.rb        |  6 +++++-
 .../src/test/ruby/shell/noninteractive_test.rb        |  2 +-
 hbase-shell/src/test/ruby/test_helper.rb              |  2 +-
 src/main/asciidoc/_chapters/shell.adoc                |  8 ++++++++
 7 files changed, 30 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/bin/hirb.rb
----------------------------------------------------------------------
diff --git a/bin/hirb.rb b/bin/hirb.rb
index 6e92d51..790ecdc 100644
--- a/bin/hirb.rb
+++ b/bin/hirb.rb
@@ -59,15 +59,12 @@ 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
@@ -82,7 +79,8 @@ for arg in ARGV
     interactive = false
     found.push(arg)
   elsif arg == '-r' || arg == '--return-values'
-    return_values = true
+    warn '[INFO] the -r | --return-values option is ignored. we always behave 
'\
+         'as though it was given.'
     found.push(arg)
   else
     # Presume it a script. Save it off for running later below
@@ -116,7 +114,7 @@ require 'shell/formatter'
 @hbase = Hbase::Hbase.new
 
 # Setup console
-@shell = Shell::Shell.new(@hbase, interactive, return_values)
+@shell = Shell::Shell.new(@hbase, interactive)
 @shell.debug = @shell_debug
 
 # Add commands to this namespace

http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/hbase-shell/src/main/ruby/hbase/table.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/table.rb 
b/hbase-shell/src/main/ruby/hbase/table.rb
index 07c74d8..6af6cfa 100644
--- a/hbase-shell/src/main/ruby/hbase/table.rb
+++ b/hbase-shell/src/main/ruby/hbase/table.rb
@@ -19,9 +19,12 @@
 
 include Java
 
+java_import org.apache.hadoop.hbase.util.Bytes
+
 # Wrapper for org.apache.hadoop.hbase.client.Table
 
 module Hbase
+  # rubocop:disable Metrics/ClassLength
   class Table
     include HBaseConstants
     @@thread_pool = nil
@@ -804,12 +807,12 @@ EOF
     # Get the split points for the table
     def _get_splits_internal
       locator = @table.getRegionLocator
-      splits = locator.getAllRegionLocations
-                      .map { |i| 
Bytes.toStringBinary(i.getRegionInfo.getStartKey) }.delete_if { |k| k == '' }
+      locator.getAllRegionLocations
+             .map { |i| Bytes.toStringBinary(i.getRegionInfo.getStartKey) }
+             .delete_if { |k| k == '' }
+    ensure
       locator.close
-      puts(format('Total number of splits = %s', splits.size + 1))
-      puts splits
-      splits
     end
   end
+  # rubocop:enable Metrics/ClassLength
 end

http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/hbase-shell/src/main/ruby/shell.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell.rb 
b/hbase-shell/src/main/ruby/shell.rb
index 507c0a9..3efe7e9 100644
--- a/hbase-shell/src/main/ruby/shell.rb
+++ b/hbase-shell/src/main/ruby/shell.rb
@@ -68,22 +68,18 @@ module Shell
   end
 
   #----------------------------------------------------------------------
+  # rubocop:disable Metrics/ClassLength
   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, return_values = !interactive)
+    def initialize(hbase, interactive = true)
       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
 
     # Returns Admin class from admin.rb
@@ -140,11 +136,8 @@ module Shell
     end
 
     # 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)
-      ret = internal_command(command, :command, *args)
-      ret if return_values
+      internal_command(command, :command, *args)
     end
 
     # call a specific internal method in the command instance
@@ -245,6 +238,7 @@ For more on the HBase Shell, see 
http://hbase.apache.org/book.html
       HERE
     end
   end
+  # rubocop:enable Metrics/ClassLength
 end
 
 # Load commands base class

http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb 
b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
index 91307c2..49a7deb 100644
--- a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
+++ b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
@@ -37,7 +37,11 @@ EOF
       end
 
       def get_splits(table)
-        table._get_splits_internal
+        splits = table._get_splits_internal
+        puts(format('Total number of splits = %<numsplits>d',
+                    numsplits: (splits.size + 1)))
+        puts splits
+        splits
       end
     end
   end

http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb 
b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
index 75a2c7d..0fae4cb 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, true)
+    @shell = Shell::Shell.new(@hbase, false)
   end
 
   define_test "Shell::Shell noninteractive mode should throw" do

http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/hbase-shell/src/test/ruby/test_helper.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/test_helper.rb 
b/hbase-shell/src/test/ruby/test_helper.rb
index 874b554..ec6bb6a 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, return_values = 
true)
+      @shell = ::Shell::Shell.new(hbase, interactive = false)
     end
     
     def shutdown

http://git-wip-us.apache.org/repos/asf/hbase/blob/5bf3b33a/src/main/asciidoc/_chapters/shell.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/_chapters/shell.adoc 
b/src/main/asciidoc/_chapters/shell.adoc
index 1e51a20..b8ea3b7 100644
--- a/src/main/asciidoc/_chapters/shell.adoc
+++ b/src/main/asciidoc/_chapters/shell.adoc
@@ -318,6 +318,7 @@ hbase(main):017:0> tables.map { |t| disable t ; drop  t}
 hbase(main):018:0>
 ----
 
+[[irbrc]]
 === _irbrc_
 
 Create an _.irbrc_ file for yourself in your home directory.
@@ -331,6 +332,13 @@ IRB.conf[:SAVE_HISTORY] = 100
 IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
 ----
 
+If you'd like to avoid printing the result of evaluting each expression to 
stderr, for example the array of tables returned from the "list" command:
+
+[source,bash]
+----
+$ echo "IRB.conf[:ECHO] = false" >>~/.irbrc
+----
+
 See the `ruby` documentation of _.irbrc_ to learn about other possible 
configurations.
 
 === LOG data to timestamp

Reply via email to