Implement no-dependency system and script hook types. Closes #39.

This commit is contained in:
Anthony Sottile
2014-03-30 15:15:13 -07:00
parent 02660f7c0a
commit c418f2b94e
14 changed files with 86 additions and 52 deletions

View File

@@ -6,6 +6,7 @@ import sys
import pre_commit.constants as C
from pre_commit.clientlib.validate_base import get_validator
from pre_commit.languages.all import all_languages
from pre_commit.util import entry
@@ -25,7 +26,7 @@ MANIFEST_JSON_SCHEMA = {
'language': {'type': 'string'},
'expected_return_value': {'type': 'number'},
},
'required': ['id', 'name', 'entry'],
'required': ['id', 'name', 'entry', 'language'],
},
}
@@ -35,13 +36,13 @@ def additional_manifest_check(obj):
language = hook_config.get('language')
if language is not None and not any(
language.startswith(lang) for lang in C.SUPPORTED_LANGUAGES
language.startswith(lang) for lang in all_languages
):
raise InvalidManifestError(
'Expected language {0} for {1} to start with one of {2!r}'.format(
hook_config['id'],
hook_config['language'],
C.SUPPORTED_LANGUAGES,
all_languages,
)
)

View File

@@ -5,13 +5,6 @@ HOOKS_WORKSPACE = '.pre-commit-files'
MANIFEST_FILE = 'hooks.yaml'
SUPPORTED_LANGUAGES = set([
'python',
'ruby',
'node',
])
YAML_DUMP_KWARGS = {
'default_flow_style': False,
'indent': 4,

View File

@@ -2,6 +2,8 @@
from pre_commit.languages import node
from pre_commit.languages import python
from pre_commit.languages import ruby
from pre_commit.languages import script
from pre_commit.languages import system
# A language implements the following two functions in its module:
#
@@ -29,4 +31,9 @@ languages = {
'node': node,
'python': python,
'ruby': ruby,
'script': script,
'system': system,
}
all_languages = languages.keys()

View File

@@ -0,0 +1,13 @@
def install_environment(repo_cmd_runner):
"""Installation for script type is a noop."""
pass
def run_hook(repo_cmd_runner, hook, file_args):
return repo_cmd_runner.run(
['xargs', '{{prefix}}{0}'.format(hook['entry'])] + hook.get('args', []),
# TODO: this is duplicated in pre_commit/languages/helpers.py
stdin='\n'.join(list(file_args) + ['']),
retcode=None,
)

View File

@@ -0,0 +1,13 @@
def install_environment(repo_cmd_runner):
"""Installation for system type is a noop."""
pass
def run_hook(repo_cmd_runner, hook, file_args):
return repo_cmd_runner.run(
['xargs', hook['entry']] + hook.get('args', []),
# TODO: this is duplicated in pre_commit/languages/helpers.py
stdin='\n'.join(list(file_args) + ['']),
retcode=None,
)

View File

@@ -82,9 +82,8 @@ class Repository(object):
"""
self.require_created()
repo_cmd_runner = self.get_cmd_runner(cmd_runner)
for language in C.SUPPORTED_LANGUAGES:
if language in self.languages:
languages[language].install_environment(repo_cmd_runner)
for language in self.languages:
languages[language].install_environment(repo_cmd_runner)
@contextlib.contextmanager
def in_checkout(self):