Remove unnecessary object level at top of manifest

This commit is contained in:
Anthony Sottile 2014-03-13 16:03:15 -07:00
parent af7e23aae5
commit e5f4c61608
4 changed files with 54 additions and 66 deletions

View file

@ -1,31 +1,29 @@
# Hooks are set up as follows
# hooks:
# -
# id: hook_id
# name: 'Readable name'
# entry: my_hook_executable
# -
# id: hook_id
# name: 'Readable name'
# entry: my_hook_executable
#
# # Optional
# description: 'Longer description of the hook'
# # Optional
# description: 'Longer description of the hook'
#
# # Optional, for now 'python[optional version]', 'ruby #.#.#', 'node'
# language: 'python'
# # Optional, for now 'python[optional version]', 'ruby #.#.#', 'node'
# language: 'python'
#
# # Optional, defaults to zero
# expected_return_value: 0
# # Optional, defaults to zero
# expected_return_value: 0
hooks:
-
id: my_hook
name: My Simple Hook
description: This is my simple hook that does blah
entry: my-simple-hook.py
language: python
expected_return_value: 0
-
id: my_grep_based_hook
name: My Bash Based Hook
description: This is a hook that uses grep to validate some stuff
entry: ./my_grep_based_hook.sh
expected_return_value: 1
-
id: my_hook
name: My Simple Hook
description: This is my simple hook that does blah
entry: my-simple-hook.py
language: python
expected_return_value: 0
-
id: my_grep_based_hook
name: My Bash Based Hook
description: This is a hook that uses grep to validate some stuff
entry: ./my_grep_based_hook.sh
expected_return_value: 1

View file

@ -1,8 +1,7 @@
hooks:
-
id: validate_manifest
name: Validate Manifest
description: This validator validates a pre-commit hooks manifest file
entry: validate-manifest
language: python
-
id: validate_manifest
name: Validate Manifest
description: This validator validates a pre-commit hooks manifest file
entry: validate-manifest
language: python

View file

@ -11,31 +11,25 @@ class InvalidManifestError(ValueError): pass
MANIFEST_JSON_SCHEMA = {
'type': 'object',
'properties': {
'hooks': {
'type': 'array',
'minItems': 1,
'items': {
'type': 'object',
'properties': {
'id': {'type': 'string'},
'name': {'type': 'string'},
'description': {'type': 'string'},
'entry': {'type': 'string'},
'language': {'type': 'string'},
'expected_return_value': {'type': 'number'},
},
'required': ['id', 'name', 'entry'],
},
'type': 'array',
'minItems': 1,
'items': {
'type': 'object',
'properties': {
'id': {'type': 'string'},
'name': {'type': 'string'},
'description': {'type': 'string'},
'entry': {'type': 'string'},
'language': {'type': 'string'},
'expected_return_value': {'type': 'number'},
},
'required': ['id', 'name', 'entry'],
},
'required': ['hooks'],
}
def additional_manifest_check(obj):
for hook_config in obj['hooks']:
for hook_config in obj:
language = hook_config.get('language')
if language is not None and not any(

View file

@ -17,7 +17,7 @@ def print_mock():
def test_run_returns_1_for_non_existent_module(print_mock):
non_existent_filename = 'file_that_does_not_exist'
ret = run(['--filename', non_existent_filename])
ret = run([non_existent_filename])
assert ret == 1
print_mock.assert_called_once_with(
'File {0} does not exist'.format(non_existent_filename),
@ -26,7 +26,7 @@ def test_run_returns_1_for_non_existent_module(print_mock):
def test_run_returns_1_for_non_yaml_file(print_mock):
non_parseable_filename = 'tests/data/non_parseable_yaml_file.yaml'
ret = run(['--filename', non_parseable_filename])
ret = run([non_parseable_filename])
assert ret == 1
print_mock.assert_any_call(
'File {0} is not a valid yaml file'.format(non_parseable_filename),
@ -35,7 +35,7 @@ def test_run_returns_1_for_non_yaml_file(print_mock):
def test_returns_1_for_valid_yaml_file_but_invalid_manifest(print_mock):
invalid_manifest = 'tests/data/valid_yaml_but_invalid_manifest.yaml'
ret = run(['--filename', invalid_manifest])
ret = run([invalid_manifest])
assert ret == 1
print_mock.assert_any_call(
'File {0} is not a valid file'.format(invalid_manifest)
@ -44,17 +44,16 @@ def test_returns_1_for_valid_yaml_file_but_invalid_manifest(print_mock):
def test_returns_0_for_valid_manifest():
valid_manifest = 'example_manifest.yaml'
ret = run(['--filename', valid_manifest])
ret = run([valid_manifest])
assert ret == 0
def test_uses_default_manifest_file_at_root_of_git(empty_git_dir):
local.path(C.MANIFEST_FILE).write("""
hooks:
-
id: foo
name: Foo
entry: foo
-
id: foo
name: Foo
entry: foo
""")
ret = run([])
assert ret == 0
@ -62,15 +61,13 @@ hooks:
def test_additional_manifest_check_raises_for_bad_language():
with pytest.raises(InvalidManifestError):
additional_manifest_check(
{'hooks': [{'id': 'foo', 'language': 'not valid'}]}
)
additional_manifest_check([{'id': 'foo', 'language': 'not valid'}])
@pytest.mark.parametrize(('obj'), (
{'hooks': [{}]},
{'hooks': [{'language': 'python'}]},
{'hooks': [{'language': 'python>2.6'}]},
[{}],
[{'language': 'python'}],
[{'language': 'python>2.6'}],
))
def test_additional_manifest_check_is_ok_with_missing_language(obj):
additional_manifest_check(obj)