1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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
This commit is contained in:
nagachika 2018-02-04 00:39:24 +00:00
parent 737d15391a
commit 82031fa844
4 changed files with 50 additions and 19 deletions

View file

@ -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

View file

@ -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

31
test/irb/test_init.rb Normal file
View file

@ -0,0 +1,31 @@
# frozen_string_literal: false
require "test/unit"
require "irb"
module TestIRB
class TestInit < Test::Unit::TestCase
def test_setup_with_argv_preserves_global_argv
argv = ["foo", "bar"]
with_argv(argv) do
IRB.setup(eval("__FILE__"), argv: [])
assert_equal argv, ARGV
end
end
def test_setup_with_empty_argv_does_not_change_dollar0
orig = $0.dup
IRB.setup(eval("__FILE__"), argv: [])
assert_equal orig, $0
end
private
def with_argv(argv)
orig = ARGV.dup
ARGV.replace(argv)
yield
ensure
ARGV.replace(orig)
end
end
end

View file

@ -1,10 +1,10 @@
#define RUBY_VERSION "2.4.4"
#define RUBY_RELEASE_DATE "2018-02-03"
#define RUBY_PATCHLEVEL 232
#define RUBY_RELEASE_DATE "2018-02-04"
#define RUBY_PATCHLEVEL 233
#define RUBY_RELEASE_YEAR 2018
#define RUBY_RELEASE_MONTH 2
#define RUBY_RELEASE_DAY 3
#define RUBY_RELEASE_DAY 4
#include "ruby/version.h"