mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 08:14:42 +04:00
Merge pull request #206 from pre-commit/xargs_derp_windows
Limit xargs line length. Resolves #205.
This commit is contained in:
commit
6259df252b
2 changed files with 32 additions and 1 deletions
|
|
@ -10,7 +10,9 @@ def file_args_to_stdin(file_args):
|
||||||
def run_hook(env, hook, file_args):
|
def run_hook(env, hook, file_args):
|
||||||
quoted_args = [pipes.quote(arg) for arg in hook['args']]
|
quoted_args = [pipes.quote(arg) for arg in hook['args']]
|
||||||
return env.run(
|
return env.run(
|
||||||
' '.join(['xargs', '-0', hook['entry']] + quoted_args),
|
# Use -s 4000 (slightly less than posix mandated minimum)
|
||||||
|
# This is to prevent "xargs: ... Bad file number" on windows
|
||||||
|
' '.join(['xargs', '-0', '-s4000', hook['entry']] + quoted_args),
|
||||||
stdin=file_args_to_stdin(file_args),
|
stdin=file_args_to_stdin(file_args),
|
||||||
retcode=None,
|
retcode=None,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -305,3 +305,32 @@ def test_get_changed_files():
|
||||||
'3387edbb1288a580b37fe25225aa0b856b18ad1a',
|
'3387edbb1288a580b37fe25225aa0b856b18ad1a',
|
||||||
)
|
)
|
||||||
assert files == ['CHANGELOG.md', 'setup.py']
|
assert files == ['CHANGELOG.md', 'setup.py']
|
||||||
|
|
||||||
|
|
||||||
|
def test_lots_of_files(mock_out_store_directory, tmpdir_factory):
|
||||||
|
# windows xargs seems to have a bug, here's a regression test for
|
||||||
|
# our workaround
|
||||||
|
git_path = make_consuming_repo(tmpdir_factory, 'python_hooks_repo')
|
||||||
|
with cwd(git_path):
|
||||||
|
# Override files so we run against them
|
||||||
|
with io.open(
|
||||||
|
'.pre-commit-config.yaml', 'a+',
|
||||||
|
) as config_file:
|
||||||
|
config_file.write(' files: ""\n')
|
||||||
|
|
||||||
|
# Write a crap ton of files
|
||||||
|
for i in range(400):
|
||||||
|
filename = '{0}{1}'.format('a' * 100, i)
|
||||||
|
open(filename, 'w').close()
|
||||||
|
|
||||||
|
cmd_output('bash', '-c', 'git add .')
|
||||||
|
install(Runner(git_path))
|
||||||
|
|
||||||
|
# Don't want to write to home directory
|
||||||
|
env = dict(os.environ, **{'PRE_COMMIT_HOME': tmpdir_factory.get()})
|
||||||
|
cmd_output(
|
||||||
|
'git', 'commit', '-m', 'Commit!',
|
||||||
|
# git commit puts pre-commit to stderr
|
||||||
|
stderr=subprocess.STDOUT,
|
||||||
|
env=env,
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue