From 84ba1fd0c21579c7fde36dfc84a686b7aaa67088 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Jan 2017 13:44:35 -0800 Subject: [PATCH 1/3] additional_dependencies support for golang hooks --- pre_commit/languages/golang.py | 3 ++- tests/repository_test.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pre_commit/languages/golang.py b/pre_commit/languages/golang.py index 9f2b106d..f81b81ec 100644 --- a/pre_commit/languages/golang.py +++ b/pre_commit/languages/golang.py @@ -49,7 +49,6 @@ def install_environment( additional_dependencies=(), ): helpers.assert_version_default('golang', version) - helpers.assert_no_additional_deps('golang', additional_dependencies) directory = repo_cmd_runner.path( helpers.environment_dir(ENVIRONMENT_DIR, 'default'), ) @@ -65,6 +64,8 @@ def install_environment( env = dict(os.environ, GOPATH=directory) cmd_output('go', 'get', './...', cwd=repo_src_dir, env=env) + for dependency in additional_dependencies: + cmd_output('go', 'get', dependency, cwd=repo_src_dir, env=env) def run_hook(repo_cmd_runner, hook, file_args): diff --git a/tests/repository_test.py b/tests/repository_test.py index 9830c58b..27da7a36 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -16,6 +16,7 @@ from pre_commit import parse_shebang from pre_commit.clientlib.validate_config import CONFIG_JSON_SCHEMA from pre_commit.clientlib.validate_config import validate_config_extra from pre_commit.jsonschema_extensions import apply_defaults +from pre_commit.languages import golang from pre_commit.languages import helpers from pre_commit.languages import node from pre_commit.languages import pcre @@ -542,6 +543,25 @@ def test_additional_node_dependencies_installed( assert 'lodash' in output +@pytest.mark.integration +def test_additional_golang_dependencies_installed( + tempdir_factory, store, +): + path = make_repo(tempdir_factory, 'golang_hooks_repo') + config = make_config_from_repo(path) + # A small go package + config['hooks'][0]['additional_dependencies'] = ['github.com/firba1/tpol'] + repo = Repository.create(config, store) + repo.require_installed() + with golang.in_env(repo.cmd_runner): + gopath = repo.cmd_runner.path(helpers.environment_dir( + golang.ENVIRONMENT_DIR, 'default', + )) + env = dict(os.environ, GOPATH=gopath) + output = cmd_output('go', 'list', '...', env=env)[1] + assert 'github.com/firba1/tpol' in output + + def test_reinstall(tempdir_factory, store, log_info_mock): path = make_repo(tempdir_factory, 'python_hooks_repo') config = make_config_from_repo(path) From 51d673dff5c17afb716a9218a1c65d1ffcf39e73 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Jan 2017 14:09:50 -0800 Subject: [PATCH 2/3] Remove unnecessary files after installation --- pre_commit/languages/golang.py | 4 ++++ tests/repository_test.py | 12 +++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/pre_commit/languages/golang.py b/pre_commit/languages/golang.py index f81b81ec..c0bfbcbc 100644 --- a/pre_commit/languages/golang.py +++ b/pre_commit/languages/golang.py @@ -9,6 +9,7 @@ from pre_commit.envcontext import Var from pre_commit.languages import helpers from pre_commit.util import clean_path_on_failure from pre_commit.util import cmd_output +from pre_commit.util import rmtree from pre_commit.xargs import xargs @@ -66,6 +67,9 @@ def install_environment( cmd_output('go', 'get', './...', cwd=repo_src_dir, env=env) for dependency in additional_dependencies: cmd_output('go', 'get', dependency, cwd=repo_src_dir, env=env) + # Same some disk space, we don't need these after installation + rmtree(repo_cmd_runner.path(directory, 'src')) + rmtree(repo_cmd_runner.path(directory, 'pkg')) def run_hook(repo_cmd_runner, hook, file_args): diff --git a/tests/repository_test.py b/tests/repository_test.py index 27da7a36..e913df73 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -553,13 +553,11 @@ def test_additional_golang_dependencies_installed( config['hooks'][0]['additional_dependencies'] = ['github.com/firba1/tpol'] repo = Repository.create(config, store) repo.require_installed() - with golang.in_env(repo.cmd_runner): - gopath = repo.cmd_runner.path(helpers.environment_dir( - golang.ENVIRONMENT_DIR, 'default', - )) - env = dict(os.environ, GOPATH=gopath) - output = cmd_output('go', 'list', '...', env=env)[1] - assert 'github.com/firba1/tpol' in output + binaries = os.listdir(repo.cmd_runner.path( + helpers.environment_dir(golang.ENVIRONMENT_DIR, 'default'), + 'bin', + )) + assert 'tpol' in binaries def test_reinstall(tempdir_factory, store, log_info_mock): From abcc41611ec4aab93f8fd941c5ca96cec10c33b3 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Wed, 25 Jan 2017 14:12:34 -0800 Subject: [PATCH 3/3] Use a binary which works on windows --- tests/repository_test.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/repository_test.py b/tests/repository_test.py index e913df73..ee03ccef 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -550,14 +550,16 @@ def test_additional_golang_dependencies_installed( path = make_repo(tempdir_factory, 'golang_hooks_repo') config = make_config_from_repo(path) # A small go package - config['hooks'][0]['additional_dependencies'] = ['github.com/firba1/tpol'] + deps = ['github.com/golang/example/hello'] + config['hooks'][0]['additional_dependencies'] = deps repo = Repository.create(config, store) repo.require_installed() binaries = os.listdir(repo.cmd_runner.path( - helpers.environment_dir(golang.ENVIRONMENT_DIR, 'default'), - 'bin', + helpers.environment_dir(golang.ENVIRONMENT_DIR, 'default'), 'bin', )) - assert 'tpol' in binaries + # normalize for windows + binaries = [os.path.splitext(binary)[0] for binary in binaries] + assert 'hello' in binaries def test_reinstall(tempdir_factory, store, log_info_mock):