Skip to content

Restore original files when in-place setup fails - #273

Open
Apeksha9389 wants to merge 1 commit into
jaraco:mainfrom
Apeksha9389:fix/inplace-setup-rollback
Open

Apeksha9389 wants to merge 1 commit into
jaraco:mainfrom
Apeksha9389:fix/inplace-setup-rollback

Conversation

@Apeksha9389

Copy link
Copy Markdown

If opening either stream fails during Path.in_place() setup, the original file has already been renamed to its backup and is never restored. For example, an invalid encoding leaves the original filename missing; a replacement-file creation failure also leaks the reader.

Move setup inside the rollback handler and manage the streams and replacement descriptor with ExitStack. Cleanup now closes acquired resources before restoring the original file. Four regression cases cover invalid reader encoding/mode, replacement creation failure, and failure to wrap its descriptor. Include a Towncrier fragment.

This complements #252, which handles interruption exceptions after setup; it preserves the existing exception class handled by rollback.

Validation on macOS/Python 3.12: all four new cases fail on unmodified main. tox -e py312 passes (168 passed, 1 skipped), including mypy and documentation checks. Explicit Ruff lint and formatting checks pass. Windows and the other Python versions were not run locally.

AI disclosure: The patch, tests, and description were prepared with OpenAI Codex assistance; the reported checks were executed locally.

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.

1 participant