search you tried in the issue tracker
Windows all-files ignored pretty_format_json
describe your issue
I have a large Git repo with about 6k files, including 1.7k JSON files. Some relative filepaths are long (256 characters). I tried to lint all the JSON files using
pre-commit run pretty-format-json --all-files
but I noticed that it only modified about a third of the JSON files. I thought it was an issue with Windows programs sometimes not supporting long filepaths (UTC). I searched the issues and thought this was related to #589 and opened #1007. I then realized that I could lint the individual files, e.g.
pre-commit run pretty-format-json --files="my/really/long/filepath/file.json"
so thought it wasn't an issue with long filepaths.
I used a debugger to confirm that all of the 1.7k JSON filepaths are passed as varargs to pre_commit.xargs.xargs(). In there, there is a partitioner that should shorten the commands to Windows' 8192 character limit (developed in #1686 to resolve #1604). Unfortunately, that only works if the hook is a .bat or .cmd file, whereas the pretty_format_json hook is a .exe. I think either:
- the
pre_commit.xargs.xargs() partition logic should be expanded also to check if the hook is .exe
- or simplify the partition logic just to check
sys.platform == 'win32'
I tried both options separately, and either would resolve my issue (all JSONs linted).
pre-commit --version
3.2.0
.pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: pretty-format-json
args: ['--autofix', '--indent=2']
~/.cache/pre-commit/pre-commit.log (if present)
No response
search you tried in the issue tracker
Windows all-files ignored pretty_format_json
describe your issue
I have a large Git repo with about 6k files, including 1.7k JSON files. Some relative filepaths are long (256 characters). I tried to lint all the JSON files using
but I noticed that it only modified about a third of the JSON files. I thought it was an issue with Windows programs sometimes not supporting long filepaths (UTC). I searched the issues and thought this was related to #589 and opened #1007. I then realized that I could lint the individual files, e.g.
pre-commit run pretty-format-json --files="my/really/long/filepath/file.json"so thought it wasn't an issue with long filepaths.
I used a debugger to confirm that all of the 1.7k JSON filepaths are passed as
varargstopre_commit.xargs.xargs(). In there, there is a partitioner that should shorten the commands to Windows' 8192 character limit (developed in #1686 to resolve #1604). Unfortunately, that only works if the hook is a.bator.cmdfile, whereas thepretty_format_jsonhook is a.exe. I think either:pre_commit.xargs.xargs()partition logic should be expanded also to check if the hook is.exesys.platform == 'win32'I tried both options separately, and either would resolve my issue (all JSONs linted).
pre-commit --version
3.2.0
.pre-commit-config.yaml
~/.cache/pre-commit/pre-commit.log (if present)
No response