diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py index a629bde1..57001ce5 100644 --- a/pre_commit/languages/node.py +++ b/pre_commit/languages/node.py @@ -24,7 +24,7 @@ def in_env(repo_cmd_runner): yield NodeEnv(repo_cmd_runner) -def install_environment(repo_cmd_runner): +def install_environment(repo_cmd_runner, version='default'): assert repo_cmd_runner.exists('package.json') with clean_path_on_failure(repo_cmd_runner.path(python.ENVIRONMENT_DIR)): diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index c7fb518f..68a38887 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -18,7 +18,7 @@ def in_env(repo_cmd_runner): yield PythonEnv(repo_cmd_runner) -def install_environment(repo_cmd_runner): +def install_environment(repo_cmd_runner, version='default'): assert repo_cmd_runner.exists('setup.py') # Install a virtualenv diff --git a/pre_commit/languages/ruby.py b/pre_commit/languages/ruby.py index 14dd47b6..87b740c6 100644 --- a/pre_commit/languages/ruby.py +++ b/pre_commit/languages/ruby.py @@ -56,7 +56,7 @@ def _install_rbenv(repo_cmd_runner): ) -def install_environment(repo_cmd_runner): +def install_environment(repo_cmd_runner, version='default'): with clean_path_on_failure(repo_cmd_runner.path('rbenv')): _install_rbenv(repo_cmd_runner) with in_env(repo_cmd_runner) as ruby_env: diff --git a/pre_commit/languages/script.py b/pre_commit/languages/script.py index 9031410e..411e48ad 100644 --- a/pre_commit/languages/script.py +++ b/pre_commit/languages/script.py @@ -1,7 +1,7 @@ ENVIRONMENT_DIR = None -def install_environment(repo_cmd_runner): +def install_environment(repo_cmd_runner, version='default'): """Installation for script type is a noop.""" diff --git a/pre_commit/languages/system.py b/pre_commit/languages/system.py index eeea2c50..486b965c 100644 --- a/pre_commit/languages/system.py +++ b/pre_commit/languages/system.py @@ -4,7 +4,7 @@ import shlex ENVIRONMENT_DIR = None -def install_environment(repo_cmd_runner): +def install_environment(repo_cmd_runner, version='default'): """Installation for system type is a noop.""" diff --git a/pre_commit/repository.py b/pre_commit/repository.py index 2fe7a00e..7f762d31 100644 --- a/pre_commit/repository.py +++ b/pre_commit/repository.py @@ -29,7 +29,10 @@ class Repository(object): @cached_property def languages(self): - return set(hook['language'] for hook in self.hooks.values()) + return set( + (hook['language'], hook['language_version']) + for hook in self.hooks.values() + ) @cached_property def hooks(self): @@ -56,7 +59,7 @@ class Repository(object): def install(self): """Install the hook repository.""" - for language_name in self.languages: + for language_name, language_version in self.languages: language = languages[language_name] if ( language.ENVIRONMENT_DIR is None or @@ -64,7 +67,7 @@ class Repository(object): ): # The language is already installed continue - language.install_environment(self.cmd_runner) + language.install_environment(self.cmd_runner, language_version) def run_hook(self, hook_id, file_args): """Run a hook. diff --git a/tests/repository_test.py b/tests/repository_test.py index b5330801..8beaeff5 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -113,7 +113,7 @@ def test_sha(mock_repo_config): @pytest.mark.integration def test_languages(config_for_python_hooks_repo, store): repo = Repository.create(config_for_python_hooks_repo, store) - assert repo.languages == set(['python']) + assert repo.languages == set([('python', 'default')]) def test_reinstall(config_for_python_hooks_repo, store):