Skip to content

Preserve Git filenames in added-file and case checks - #1281

Closed
xiehuanyi wants to merge 3 commits into
pre-commit:mainfrom
xiehuanyi:fix/nul-delimited-git-paths-20261014
Closed

xiehuanyi wants to merge 3 commits into
pre-commit:mainfrom
xiehuanyi:fix/nul-delimited-git-paths-20261014

Conversation

@xiehuanyi

Copy link
Copy Markdown

With Git's default core.quotePath=true, check-added-large-files --maxkb=1 mañana.txt returns success for a staged 2 KiB file. The staged path is escaped by Git, so it no longer matches the filename supplied to the hook. The same mismatch lets check-case-conflict miss CAFÉ.py when café.py is already committed.

Read the staged-file and repository-file lists with -z and the existing zsplit helper. This preserves the actual paths, including non-ASCII characters, tabs, and newlines.

Validation:

  • Seven new real-Git regression cases fail on unchanged main.
  • The complete Python 3.11 suite passes: 420 tests, four existing expected failures, 100% coverage.
  • All configured checks pass for the changed files, including mypy.

The tests set core.quotePath=true explicitly. Filenames containing tabs or newlines are skipped on Windows, where those names are invalid; the Unicode cases run on all platforms. This was found during source review of Git filename handling. AI assistance: OpenAI gpt-6.1-sol, xhigh, through Codex.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants