From 41558cf59da2438a7101115f7b089306ef98a840 Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Wed, 23 Sep 2009 03:10:49 +0000 Subject: [PATCH] HBASE-1859 Misc shell fixes patch git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@817947 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 1 + bin/Formatter.rb | 24 ++++++++++++++++-------- bin/hirb.rb | 12 ++++++++---- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d582a2aa004..fd94ebaf548 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -43,6 +43,7 @@ Release 0.21.0 - Unreleased HBASE-1857 WrongRegionException when setting region online after .META. split (Cosmin Lehane via Stack) HBASE-1809 NPE thrown in BoundedRangeFileInputStream + HBASE-1859 Misc shell fixes patch (Kyle Oba via Stack) IMPROVEMENTS HBASE-1760 Cleanup TODOs in HTable diff --git a/bin/Formatter.rb b/bin/Formatter.rb index a793290bb3a..85d7ff259da 100644 --- a/bin/Formatter.rb +++ b/bin/Formatter.rb @@ -2,12 +2,20 @@ module Formatter # Base abstract class for results formatting. class Formatter + def is_kernel?(obj) + obj.kind_of?(Module) and obj.name == "Kernel" + end + # Takes an output stream and a print width. - def initialize(o, w = 100) - raise TypeError.new("Type %s of parameter %s is not IO" % [o.class, o]) \ - unless o.instance_of? IO - @out = o - @maxWidth = w + def initialize(opts={}) + defaults = {:output_stream => Kernel, :format_width => 100} + options = defaults.merge(opts) + + @out = options[:output_stream] + raise TypeError.new("Type %s of parameter %s is not IO" % [@out.class, @out]) \ + unless @out.instance_of? IO or is_kernel?(@out) + + @maxWidth = options[:format_width] @rowCount = 0 end @@ -27,7 +35,7 @@ module Formatter end if args.class == String output(@maxWidth, args) - puts + @out.puts return end # TODO: Look at the type. Is it RowResult? @@ -35,7 +43,7 @@ module Formatter splits = split(@maxWidth, dump(args[0])) for l in splits output(@maxWidth, l) - puts + @out.puts end elsif args.length == 2 col1width = (not widths or widths.length == 0) ? @maxWidth / 4 : @maxWidth * widths[0] / 100 @@ -57,7 +65,7 @@ module Formatter @out.print(" ") output(col2width, splits2[index]) index += 1 - puts + @out.puts end else # Print a space to set off multi-column rows diff --git a/bin/hirb.rb b/bin/hirb.rb index 51a9ee91496..ae1aba9e641 100644 --- a/bin/hirb.rb +++ b/bin/hirb.rb @@ -71,7 +71,8 @@ for arg in found ARGV.delete(arg) end # Presume console format. -@formatter = Formatter::Console.new(STDOUT, format_width) +# Formatter takes an :output_stream parameter, if you don't want STDOUT. +@formatter = Formatter::Console.new(:format_width => format_width) # TODO, etc. @formatter = Formatter::XHTML.new(STDOUT) # Setup the HBase module. Create a configuration. @@ -100,9 +101,6 @@ promoteConstants(org.apache.hadoop.hbase.HColumnDescriptor.constants) promoteConstants(org.apache.hadoop.hbase.HTableDescriptor.constants) promoteConstants(HBase.constants) -# If script2run, try running it. Will go on to run the shell unless -# script calls 'exit' or 'exit 0' or 'exit errcode'. -load(script2run) if script2run # Start of the hbase shell commands. @@ -428,6 +426,12 @@ def split(tableNameOrRegionName) admin().split(tableNameOrRegionName) end + +# If script2run, try running it. Will go on to run the shell unless +# script calls 'exit' or 'exit 0' or 'exit errcode'. +load(script2run) if script2run + + # Output a banner message that tells users where to go for help puts <' for list of supported commands.