From 82031fa8449ccc351da2e2c857d26be92c2cc281 Mon Sep 17 00:00:00 2001 From: nagachika Date: Sun, 4 Feb 2018 00:39:24 +0000 Subject: merge revision(s) 61149,61150,61151,61167: [Backport #14162] irb.rb: preserve ARGV on binding.irb This is not perfectly good solution (at least we don't want to have ARGV as default value of `argv` argument), but unfortunately IRB.setup and IRB.parse_opts are public methods and we can't make breaking change to those methods. We may deprecate using them and then make them private in the future, but the removal should not be in Ruby 2.5. So I kept their interface for now. [Bug #14162] [close GH-1770] * properties. irb/init.rb: make sure ARGV refers to toplevel one irb/test_init.rb: add test to ensure $0 is not changed. At first `ARGV.unshift('something')` was suggested for r61149, but it wasn't sufficient because it modifies $0. Not only to preserve ARGV, but also r61149 intends to preserve $0. This test prevents future breakage of the behavior. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@62185 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/irb.rb | 2 +- lib/irb/init.rb | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/irb.rb b/lib/irb.rb index 676abe42cd..fb6102724d 100644 --- a/lib/irb.rb +++ b/lib/irb.rb @@ -709,7 +709,7 @@ end class Binding # :nodoc: def irb - IRB.setup(eval("__FILE__")) + IRB.setup(eval("__FILE__"), argv: []) IRB::Irb.new(IRB::WorkSpace.new(self)).run(IRB.conf) end end diff --git a/lib/irb/init.rb b/lib/irb/init.rb index 1184db15ea..0ec780341a 100644 --- a/lib/irb/init.rb +++ b/lib/irb/init.rb @@ -13,10 +13,10 @@ module IRB # :nodoc: # initialize config - def IRB.setup(ap_path) + def IRB.setup(ap_path, argv: ::ARGV) IRB.init_config(ap_path) IRB.init_error - IRB.parse_opts + IRB.parse_opts(argv: argv) IRB.run_config IRB.load_modules @@ -122,9 +122,9 @@ module IRB # :nodoc: end # option analyzing - def IRB.parse_opts + def IRB.parse_opts(argv: ::ARGV) load_path = [] - while opt = ARGV.shift + while opt = argv.shift case opt when "-f" @CONF[:RC] = false @@ -136,7 +136,7 @@ module IRB # :nodoc: when "-w" $VERBOSE = true when /^-W(.+)?/ - opt = $1 || ARGV.shift + opt = $1 || argv.shift case opt when "0" $VERBOSE = nil @@ -146,19 +146,19 @@ module IRB # :nodoc: $VERBOSE = true end when /^-r(.+)?/ - opt = $1 || ARGV.shift + opt = $1 || argv.shift @CONF[:LOAD_MODULES].push opt if opt when /^-I(.+)?/ - opt = $1 || ARGV.shift + opt = $1 || argv.shift load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt when '-U' set_encoding("UTF-8", "UTF-8") when /^-E(.+)?/, /^--encoding(?:=(.+))?/ - opt = $1 || ARGV.shift + opt = $1 || argv.shift set_encoding(*opt.split(':', 2)) when "--inspect" - if /^-/ !~ ARGV.first - @CONF[:INSPECT_MODE] = ARGV.shift + if /^-/ !~ argv.first + @CONF[:INSPECT_MODE] = argv.shift else @CONF[:INSPECT_MODE] = true end @@ -177,7 +177,7 @@ module IRB # :nodoc: when "--noverbose" @CONF[:VERBOSE] = false when /^--prompt-mode(?:=(.+))?/, /^--prompt(?:=(.+))?/ - opt = $1 || ARGV.shift + opt = $1 || argv.shift prompt_mode = opt.upcase.tr("-", "_").intern @CONF[:PROMPT_MODE] = prompt_mode when "--noprompt" @@ -189,13 +189,13 @@ module IRB # :nodoc: when "--tracer" @CONF[:USE_TRACER] = true when /^--back-trace-limit(?:=(.+))?/ - @CONF[:BACK_TRACE_LIMIT] = ($1 || ARGV.shift).to_i + @CONF[:BACK_TRACE_LIMIT] = ($1 || argv.shift).to_i when /^--context-mode(?:=(.+))?/ - @CONF[:CONTEXT_MODE] = ($1 || ARGV.shift).to_i + @CONF[:CONTEXT_MODE] = ($1 || argv.shift).to_i when "--single-irb" @CONF[:SINGLE_IRB] = true when /^--irb_debug(?:=(.+))?/ - @CONF[:DEBUG_LEVEL] = ($1 || ARGV.shift).to_i + @CONF[:DEBUG_LEVEL] = ($1 || argv.shift).to_i when "-v", "--version" print IRB.version, "\n" exit 0 @@ -204,7 +204,7 @@ module IRB # :nodoc: IRB.print_usage exit 0 when "--" - if opt = ARGV.shift + if opt = argv.shift @CONF[:SCRIPT] = opt $0 = opt end -- cgit v1.2.3