summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/irb.rb2
-rw-r--r--lib/irb/init.rb30
-rw-r--r--test/irb/test_init.rb31
-rw-r--r--version.h6
4 files changed, 50 insertions, 19 deletions
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
diff --git a/test/irb/test_init.rb b/test/irb/test_init.rb
new file mode 100644
index 0000000000..3d6c0f3bdc
--- /dev/null
+++ b/test/irb/test_init.rb
@@ -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
diff --git a/version.h b/version.h
index 72d664f7ed..2888eec65b 100644
--- a/version.h
+++ b/version.h
@@ -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"