gh-128066: Properly handle history file writes for RO fs on PyREPL (gh-134380)

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
Chris Patti 2025-05-20 15:47:57 -04:00 committed by GitHub
parent c7f8e706e1
commit c91ad5da9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 1 deletions

View File

@ -31,6 +31,7 @@ import os
import sys
import code
import warnings
import errno
from .readline import _get_reader, multiline_input, append_history_file
@ -153,6 +154,7 @@ def run_multiline_interactive_console(
append_history_file()
except (FileNotFoundError, PermissionError, OSError) as e:
warnings.warn(f"failed to open the history file for writing: {e}")
input_n += 1
except KeyboardInterrupt:
r = _get_reader()

View File

@ -75,6 +75,7 @@ import builtins
import _sitebuiltins
import _io as io
import stat
import errno
# Prefixes for site-packages; add additional prefixes like /usr/local here
PREFIXES = [sys.prefix, sys.exec_prefix]
@ -578,10 +579,15 @@ def register_readline():
def write_history():
try:
readline_module.write_history_file(history)
except (FileNotFoundError, PermissionError):
except FileNotFoundError, PermissionError:
# home directory does not exist or is not writable
# https://bugs.python.org/issue19891
pass
except OSError:
if errno.EROFS:
pass # gh-128066: read-only file system
else:
raise
atexit.register(write_history)

View File

@ -0,0 +1,3 @@
Fixes an edge case where PyREPL improperly threw an error when Python is
invoked on a read only filesystem while trying to write history file
entries.