diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index d335b351..ea415c94 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import hashlib import os +import shlex from pre_commit import five from pre_commit.languages import helpers @@ -81,14 +82,18 @@ def run_hook(repo_cmd_runner, hook, file_args): # Rebuild the docker image in case it has gone missing, as many people do # automated cleanup of docker images. build_docker_image(repo_cmd_runner, pull=False) + + entry_parts = shlex.split(hook['entry']) + entry_executable, entry_args = entry_parts[0], entry_parts[1:] + cmd = ( 'docker', 'run', '--rm', '-u', '{}:{}'.format(os.getuid(), os.getgid()), '-v', '{}:/src:rw'.format(os.getcwd()), '--workdir', '/src', - '--entrypoint', hook['entry'], + '--entrypoint', entry_executable, docker_tag(repo_cmd_runner) ) - return xargs(cmd + tuple(hook['args']), file_args) + return xargs(cmd + tuple(entry_args) + tuple(hook['args']), file_args) diff --git a/testing/resources/docker_hooks_repo/hooks.yaml b/testing/resources/docker_hooks_repo/hooks.yaml index 2c9a115d..52957396 100644 --- a/testing/resources/docker_hooks_repo/hooks.yaml +++ b/testing/resources/docker_hooks_repo/hooks.yaml @@ -4,6 +4,12 @@ language: docker files: \.txt$ +- id: docker-hook-arg + name: Docker test hook + entry: echo -n + language: docker + files: \.txt$ + - id: docker-hook-failing name: Docker test hook with nonzero exit code entry: bork diff --git a/tests/repository_test.py b/tests/repository_test.py index 5d8ed8ab..ad3c8234 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -141,6 +141,17 @@ def test_run_a_docker_hook(tempdir_factory, store): ) +@skipif_slowtests_false +@skipif_cant_run_docker +@pytest.mark.integration +def test_run_a_docker_hook_with_entry_args(tempdir_factory, store): + _test_hook_repo( + tempdir_factory, store, 'docker_hooks_repo', + 'docker-hook-arg', + ['Hello World from docker'], b'Hello World from docker', + ) + + @skipif_slowtests_false @skipif_cant_run_docker @pytest.mark.integration