From b7bd825e15166036f28d42f8f4c395a76ae2c23c Mon Sep 17 00:00:00 2001 From: Ben Picolo Date: Thu, 5 Jan 2017 09:31:22 -0500 Subject: [PATCH] Support docker hooks with args --- pre_commit/languages/docker.py | 9 ++++++--- testing/resources/docker_hooks_repo/hooks.yaml | 6 ++++++ tests/repository_test.py | 11 +++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/pre_commit/languages/docker.py b/pre_commit/languages/docker.py index d335b351..68061ab2 100644 --- a/pre_commit/languages/docker.py +++ b/pre_commit/languages/docker.py @@ -81,14 +81,17 @@ 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 = hook['entry'].split(' ') + 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