Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
-
Incompatible change, Reviewed
-
Description
Right now, the shell builds a list of commands and then injects them into the root exectution's context
bin/hirb.rb
# Add commands to this namespace
@shell.export_commands(self)
hbase-shell/src/main/ruby/shell.rb
def export_commands(where) ::Shell.commands.keys.each do |cmd| # here where is the IRB namespace # this method just adds the call to the specified command # which just references back to 'this' shell object # a decently extensible way to add commands where.send :instance_eval, <<-EOF def #{cmd}(*args) ret = @shell.command('#{cmd}', *args) puts return ret end EOF end end
This is an unclean abstraction. For one, it requires that there be an instance variable in the main namespace called '@shell' without making that clear in the docs. Additionally, it complicates maintenance by breaking isolation.
We should update things so that shell can provide a binding for eval or a workspace for IRB execution and then use it directly when we construct our IRB session.
Attachments
Issue Links
- causes
-
HBASE-26269 Shell 'load' command behavior has changed
- Open
-
HBASE-26469 correct HBase shell exit behavior to match code passed to exit
- Resolved
- links to