mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-13 12:30:08 -06:00
Added the additional_dependencies config parameter
Added the ability to specify additional dependencies to be installed in the pre-commit environment. Fixed broken tests.
This commit is contained in:
@@ -23,7 +23,8 @@ def in_env(repo_cmd_runner, language_version):
|
||||
yield NodeEnv(repo_cmd_runner, language_version)
|
||||
|
||||
|
||||
def install_environment(repo_cmd_runner, version='default'):
|
||||
def install_environment(repo_cmd_runner, version='default',
|
||||
additional_dependencies=None):
|
||||
assert repo_cmd_runner.exists('package.json')
|
||||
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
|
||||
|
||||
@@ -41,6 +42,9 @@ def install_environment(repo_cmd_runner, version='default'):
|
||||
|
||||
with in_env(repo_cmd_runner, version) as node_env:
|
||||
node_env.run("cd '{prefix}' && npm install -g")
|
||||
if additional_dependencies:
|
||||
node_env.run("cd '{prefix}' && npm install -g " +
|
||||
(' ').join(additional_dependencies))
|
||||
|
||||
|
||||
def run_hook(repo_cmd_runner, hook, file_args):
|
||||
|
||||
@@ -9,7 +9,8 @@ from pre_commit.util import shell_escape
|
||||
ENVIRONMENT_DIR = None
|
||||
|
||||
|
||||
def install_environment(repo_cmd_runner, version='default'):
|
||||
def install_environment(repo_cmd_runner, version='default',
|
||||
additional_dependencies=None):
|
||||
"""Installation for pcre type is a noop."""
|
||||
raise AssertionError('Cannot install pcre repo.')
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@ def norm_version(version):
|
||||
return version
|
||||
|
||||
|
||||
def install_environment(repo_cmd_runner, version='default'):
|
||||
def install_environment(repo_cmd_runner, version='default',
|
||||
additional_dependencies=None):
|
||||
assert repo_cmd_runner.exists('setup.py')
|
||||
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
|
||||
|
||||
@@ -57,6 +58,9 @@ def install_environment(repo_cmd_runner, version='default'):
|
||||
repo_cmd_runner.run(venv_cmd)
|
||||
with in_env(repo_cmd_runner, version) as env:
|
||||
env.run("cd '{prefix}' && pip install .")
|
||||
if additional_dependencies:
|
||||
env.run("cd '{prefix}' && pip install -U" +
|
||||
(' ').join(additional_dependencies))
|
||||
|
||||
|
||||
def run_hook(repo_cmd_runner, hook, file_args):
|
||||
|
||||
@@ -78,7 +78,8 @@ def _install_ruby(environment, version):
|
||||
environment.run('rbenv install {0}'.format(version))
|
||||
|
||||
|
||||
def install_environment(repo_cmd_runner, version='default'):
|
||||
def install_environment(repo_cmd_runner, version='default',
|
||||
additional_dependencies=None):
|
||||
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
|
||||
with clean_path_on_failure(repo_cmd_runner.path(directory)):
|
||||
# TODO: this currently will fail if there's no version specified and
|
||||
@@ -91,6 +92,11 @@ def install_environment(repo_cmd_runner, version='default'):
|
||||
'cd {prefix} && gem build *.gemspec'
|
||||
' && gem install --no-ri --no-rdoc *.gem',
|
||||
)
|
||||
if additional_dependencies:
|
||||
ruby_env.run(
|
||||
'cd {prefix} && gem install --no-document ' + (' ').join(
|
||||
additional_dependencies)
|
||||
)
|
||||
|
||||
|
||||
def run_hook(repo_cmd_runner, hook, file_args):
|
||||
|
||||
@@ -6,7 +6,8 @@ from pre_commit.languages.helpers import file_args_to_stdin
|
||||
ENVIRONMENT_DIR = None
|
||||
|
||||
|
||||
def install_environment(repo_cmd_runner, version='default'):
|
||||
def install_environment(repo_cmd_runner, version='default',
|
||||
additional_dependencies=None):
|
||||
"""Installation for script type is a noop."""
|
||||
raise AssertionError('Cannot install script repo.')
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ from pre_commit.languages.helpers import file_args_to_stdin
|
||||
ENVIRONMENT_DIR = None
|
||||
|
||||
|
||||
def install_environment(repo_cmd_runner, version='default'):
|
||||
def install_environment(repo_cmd_runner, version='default',
|
||||
additional_dependencies=None):
|
||||
"""Installation for system type is a noop."""
|
||||
raise AssertionError('Cannot install system repo.')
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ from __future__ import unicode_literals
|
||||
|
||||
import logging
|
||||
import shutil
|
||||
from collections import defaultdict
|
||||
|
||||
from cached_property import cached_property
|
||||
|
||||
@@ -49,6 +50,14 @@ class Repository(object):
|
||||
for _, hook in self.hooks
|
||||
)
|
||||
|
||||
@cached_property
|
||||
def additional_dependencies(self):
|
||||
dep_dict = defaultdict(lambda: defaultdict(set))
|
||||
for _, hook in self.hooks:
|
||||
dep_dict[hook['language']][hook['language_version']].update(
|
||||
hook.get('dependencies', []))
|
||||
return dep_dict
|
||||
|
||||
@cached_property
|
||||
def hooks(self):
|
||||
# TODO: merging in manifest dicts is a smell imo
|
||||
@@ -107,7 +116,9 @@ class Repository(object):
|
||||
if self.cmd_runner.exists(directory):
|
||||
shutil.rmtree(self.cmd_runner.path(directory))
|
||||
|
||||
language.install_environment(self.cmd_runner, language_version)
|
||||
language.install_environment(
|
||||
self.cmd_runner, language_version,
|
||||
self.additional_dependencies[language_name][language_version])
|
||||
# Touch the .installed file (atomic) to indicate we've installed
|
||||
open(self.cmd_runner.path(directory, '.installed'), 'w').close()
|
||||
|
||||
|
||||
@@ -11,10 +11,10 @@ from pre_commit.languages.all import languages
|
||||
@pytest.mark.parametrize('language', all_languages)
|
||||
def test_install_environment_argspec(language):
|
||||
expected_argspec = inspect.ArgSpec(
|
||||
args=['repo_cmd_runner', 'version'],
|
||||
args=['repo_cmd_runner', 'version', 'additional_dependencies'],
|
||||
varargs=None,
|
||||
keywords=None,
|
||||
defaults=('default',),
|
||||
defaults=('default', None),
|
||||
)
|
||||
argspec = inspect.getargspec(languages[language].install_environment)
|
||||
assert argspec == expected_argspec
|
||||
|
||||
Reference in New Issue
Block a user