Skip to content

[3.15] gh-123018: Keep the libedit history file header when truncating (GH-157165) - #157172

Draft
miss-islington wants to merge 1 commit into
python:3.15from
miss-islington:backport-2638785-3.15
Draft

[3.15] gh-123018: Keep the libedit history file header when truncating (GH-157165)#157172
miss-islington wants to merge 1 commit into
python:3.15from
miss-islington:backport-2638785-3.15

Conversation

@miss-islington

@miss-islington miss-islington commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

libedit's history_truncate_file() keeps the last N lines of the file,
which drops the "HiStOrY_V2" header line that its own write_history()
emits and that its read_history() requires. So on a libedit build,
readline.write_history_file() or readline.append_history_file() after
readline.set_history_length() produced a file that
readline.read_history_file() rejected with EINVAL.

Under the libedit emulation, truncate the file ourselves and keep the
header, resolving the default "~/.history" the same way libedit does.
Apple's libedit fork already preserves the header, so the workaround is
not compiled on macOS.
(cherry picked from commit 2638785)

Co-authored-by: Gregory P. Smith 68491+gpshead@users.noreply.github.com

…pythonGH-157165)

libedit's history_truncate_file() keeps the last N lines of the file,
which drops the "_HiStOrY_V2_" header line that its own write_history()
emits and that its read_history() requires.  So on a libedit build,
readline.write_history_file() or readline.append_history_file() after
readline.set_history_length() produced a file that
readline.read_history_file() rejected with EINVAL.

Under the libedit emulation, truncate the file ourselves and keep the
header, resolving the default "~/.history" the same way libedit does.
Apple's libedit fork already preserves the header, so the workaround is
not compiled on macOS.
(cherry picked from commit 2638785)

Co-authored-by: Gregory P. Smith <68491+gpshead@users.noreply.github.com>
@gpshead

gpshead commented Sep 8, 2026

Copy link
Copy Markdown
Member

leave this for 3.15.1

@gpshead gpshead self-assigned this Sep 8, 2026
@gpshead
gpshead marked this pull request as draft September 8, 2026 06:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants