Fix history saving when directory writability is unreliable#1220
Open
st0012 wants to merge 3 commits into
Open
Fix history saving when directory writability is unreliable#1220st0012 wants to merge 3 commits into
st0012 wants to merge 3 commits into
Conversation
tompng
approved these changes
Jun 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Can't write history ... due to insufficient permissionson exit even though writing the same history file manually succeeds.IRB::HistorySavingAbility#ensure_history_file_writable, which checkedhistory_file.dirname.writable?before attempting the history write.w32_accesschecks synthetic Unix-style mode bits derived from Windows file attributes; that path can disagree with the actual write operation for directories.Solution
File.openwrite and reportENOENT,EACCES, orEPERMfrom that operation.writable?gate.attrib +R, verifies that a normal file write still succeeds, runs an IRB session, and asserts that the history file is saved without warnings intest_history_windows.rb.HistoryTestCase, soHistoryTestandHistoryWindowsTestuse the same setup without making the Windows regression inherit the full non-Windows test suite.test/irb/**/test_*.rbtest pattern, while its ownwindows?guard omits the case on non-Windows platforms.