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:
parent
c7f8e706e1
commit
c91ad5da9d
@ -31,6 +31,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import code
|
import code
|
||||||
import warnings
|
import warnings
|
||||||
|
import errno
|
||||||
|
|
||||||
from .readline import _get_reader, multiline_input, append_history_file
|
from .readline import _get_reader, multiline_input, append_history_file
|
||||||
|
|
||||||
@ -153,6 +154,7 @@ def run_multiline_interactive_console(
|
|||||||
append_history_file()
|
append_history_file()
|
||||||
except (FileNotFoundError, PermissionError, OSError) as e:
|
except (FileNotFoundError, PermissionError, OSError) as e:
|
||||||
warnings.warn(f"failed to open the history file for writing: {e}")
|
warnings.warn(f"failed to open the history file for writing: {e}")
|
||||||
|
|
||||||
input_n += 1
|
input_n += 1
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
r = _get_reader()
|
r = _get_reader()
|
||||||
|
@ -75,6 +75,7 @@ import builtins
|
|||||||
import _sitebuiltins
|
import _sitebuiltins
|
||||||
import _io as io
|
import _io as io
|
||||||
import stat
|
import stat
|
||||||
|
import errno
|
||||||
|
|
||||||
# Prefixes for site-packages; add additional prefixes like /usr/local here
|
# Prefixes for site-packages; add additional prefixes like /usr/local here
|
||||||
PREFIXES = [sys.prefix, sys.exec_prefix]
|
PREFIXES = [sys.prefix, sys.exec_prefix]
|
||||||
@ -578,10 +579,15 @@ def register_readline():
|
|||||||
def write_history():
|
def write_history():
|
||||||
try:
|
try:
|
||||||
readline_module.write_history_file(history)
|
readline_module.write_history_file(history)
|
||||||
except (FileNotFoundError, PermissionError):
|
except FileNotFoundError, PermissionError:
|
||||||
# home directory does not exist or is not writable
|
# home directory does not exist or is not writable
|
||||||
# https://bugs.python.org/issue19891
|
# https://bugs.python.org/issue19891
|
||||||
pass
|
pass
|
||||||
|
except OSError:
|
||||||
|
if errno.EROFS:
|
||||||
|
pass # gh-128066: read-only file system
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
atexit.register(write_history)
|
atexit.register(write_history)
|
||||||
|
|
||||||
|
@ -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.
|
Loading…
x
Reference in New Issue
Block a user