mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/irb] Fix history file saving with concurrent irb sessions when history file doesn't exist
If history file didn't exist when irb was started, @loaded_history_mtime
would be nil. However, if the history file didn't exist before, but it
exists when saving history, that means the history file was modified,
and we should handle it the same way as we handle the other case where
the history file was modified.
Fixes #388
8d277aafcb
This commit is contained in:
parent
b876230e5c
commit
9299db49f5
2 changed files with 24 additions and 2 deletions
|
@ -107,9 +107,9 @@ module IRB
|
||||||
raise
|
raise
|
||||||
end
|
end
|
||||||
|
|
||||||
if File.exist?(history_file) && @loaded_history_mtime &&
|
if File.exist?(history_file) &&
|
||||||
File.mtime(history_file) != @loaded_history_mtime
|
File.mtime(history_file) != @loaded_history_mtime
|
||||||
history = history[@loaded_history_lines..-1]
|
history = history[@loaded_history_lines..-1] if @loaded_history_lines
|
||||||
append_history = true
|
append_history = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,28 @@ module TestIRB
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_history_concurrent_use_not_present
|
||||||
|
backup_home = ENV["HOME"]
|
||||||
|
backup_xdg_config_home = ENV.delete("XDG_CONFIG_HOME")
|
||||||
|
IRB.conf[:SAVE_HISTORY] = 1
|
||||||
|
Dir.mktmpdir("test_irb_history_#{$$}") do |tmpdir|
|
||||||
|
ENV["HOME"] = tmpdir
|
||||||
|
io = TestInputMethod.new
|
||||||
|
io.class::HISTORY.clear
|
||||||
|
io.load_history
|
||||||
|
io.class::HISTORY.concat(%w"line1 line2")
|
||||||
|
|
||||||
|
history_file = IRB.rc_file("_history")
|
||||||
|
assert !File.file?(history_file)
|
||||||
|
File.write(history_file, "line0\n")
|
||||||
|
io.save_history
|
||||||
|
assert_equal(%w"line0 line1 line2", File.read(history_file).split)
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
ENV["HOME"] = backup_home
|
||||||
|
ENV["XDG_CONFIG_HOME"] = backup_xdg_config_home
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def assert_history(expected_history, initial_irb_history, input)
|
def assert_history(expected_history, initial_irb_history, input)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue