diff --git a/example_manifest.yaml b/example_manifest.yaml index 426b8545..53ef2801 100644 --- a/example_manifest.yaml +++ b/example_manifest.yaml @@ -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 diff --git a/manifest.yaml b/manifest.yaml index 77c0add8..51509c59 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -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 \ No newline at end of file +- + id: validate_manifest + name: Validate Manifest + description: This validator validates a pre-commit hooks manifest file + entry: validate-manifest + language: python \ No newline at end of file diff --git a/pre_commit/clientlib/validate_manifest.py b/pre_commit/clientlib/validate_manifest.py index 188e292b..7f11ff0c 100644 --- a/pre_commit/clientlib/validate_manifest.py +++ b/pre_commit/clientlib/validate_manifest.py @@ -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( diff --git a/tests/clientlib/validate_manifest_test.py b/tests/clientlib/validate_manifest_test.py index b870ade1..73a71035 100644 --- a/tests/clientlib/validate_manifest_test.py +++ b/tests/clientlib/validate_manifest_test.py @@ -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) \ No newline at end of file