Skip to content

Commit

Permalink
deprecate pre-commit-validate-{config,manifest}
Browse files Browse the repository at this point in the history
  • Loading branch information
asottile committed Apr 24, 2022
1 parent e1ce4c0 commit 8afa837
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 23 deletions.
4 changes: 2 additions & 2 deletions .pre-commit-hooks.yaml
@@ -1,6 +1,6 @@
- id: validate_manifest
name: validate pre-commit manifest
description: This validator validates a pre-commit hooks manifest file
entry: pre-commit-validate-manifest
entry: pre-commit validate-manifest
language: python
files: ^(\.pre-commit-hooks\.yaml|hooks\.yaml)$
files: ^\.pre-commit-hooks\.yaml$
2 changes: 1 addition & 1 deletion azure-pipelines.yml
Expand Up @@ -10,7 +10,7 @@ resources:
type: github
endpoint: github
name: asottile/azure-pipeline-templates
ref: refs/tags/v2.1.0
ref: refs/tags/v2.4.1

jobs:
- template: job--python-tox.yml@asottile
Expand Down
30 changes: 14 additions & 16 deletions pre_commit/clientlib.py
Expand Up @@ -14,6 +14,8 @@

import pre_commit.constants as C
from pre_commit.color import add_color_option
from pre_commit.commands.validate_config import validate_config
from pre_commit.commands.validate_manifest import validate_manifest
from pre_commit.errors import FatalError
from pre_commit.languages.all import all_languages
from pre_commit.logging_handler import logging_handler
Expand Down Expand Up @@ -100,14 +102,12 @@ def validate_manifest_main(argv: Sequence[str] | None = None) -> int:
args = parser.parse_args(argv)

with logging_handler(args.color):
ret = 0
for filename in args.filenames:
try:
load_manifest(filename)
except InvalidManifestError as e:
print(e)
ret = 1
return ret
logger.warning(
'pre-commit-validate-manifest is deprecated -- '
'use `pre-commit validate-manifest` instead.',
)

return validate_manifest(args.filenames)


LOCAL = 'local'
Expand Down Expand Up @@ -409,11 +409,9 @@ def validate_config_main(argv: Sequence[str] | None = None) -> int:
args = parser.parse_args(argv)

with logging_handler(args.color):
ret = 0
for filename in args.filenames:
try:
load_config(filename)
except InvalidConfigError as e:
print(e)
ret = 1
return ret
logger.warning(
'pre-commit-validate-config is deprecated -- '
'use `pre-commit validate-config` instead.',
)

return validate_config(args.filenames)
16 changes: 16 additions & 0 deletions pre_commit/commands/validate_config.py
@@ -0,0 +1,16 @@
from __future__ import annotations

from pre_commit import clientlib


def validate_config(filenames: list[str]) -> int:
ret = 0

for filename in filenames:
try:
clientlib.load_config(filename)
except clientlib.InvalidConfigError as e:
print(e)
ret = 1

return ret
16 changes: 16 additions & 0 deletions pre_commit/commands/validate_manifest.py
@@ -0,0 +1,16 @@
from __future__ import annotations

from pre_commit import clientlib


def validate_manifest(filenames: list[str]) -> int:
ret = 0

for filename in filenames:
try:
clientlib.load_manifest(filename)
except clientlib.InvalidManifestError as e:
print(e)
ret = 1

return ret
26 changes: 24 additions & 2 deletions pre_commit/main.py
Expand Up @@ -21,6 +21,8 @@
from pre_commit.commands.run import run
from pre_commit.commands.sample_config import sample_config
from pre_commit.commands.try_repo import try_repo
from pre_commit.commands.validate_config import validate_config
from pre_commit.commands.validate_manifest import validate_manifest
from pre_commit.error_handler import error_handler
from pre_commit.logging_handler import logging_handler
from pre_commit.store import Store
Expand All @@ -34,8 +36,10 @@
# pyvenv
os.environ.pop('__PYVENV_LAUNCHER__', None)


COMMANDS_NO_GIT = {'clean', 'gc', 'init-templatedir', 'sample-config'}
COMMANDS_NO_GIT = {
'clean', 'gc', 'init-templatedir', 'sample-config',
'validate-config', 'validate-manifest',
}


def _add_config_option(parser: argparse.ArgumentParser) -> None:
Expand Down Expand Up @@ -304,6 +308,20 @@ def main(argv: Sequence[str] | None = None) -> int:
_add_config_option(uninstall_parser)
_add_hook_type_option(uninstall_parser)

validate_config_parser = subparsers.add_parser(
'validate-config', help='Validate .pre-commit-config.yaml files',
)
add_color_option(validate_config_parser)
_add_config_option(validate_config_parser)
validate_config_parser.add_argument('filenames', nargs='*')

validate_manifest_parser = subparsers.add_parser(
'validate-manifest', help='Validate .pre-commit-hooks.yaml files',
)
add_color_option(validate_manifest_parser)
_add_config_option(validate_manifest_parser)
validate_manifest_parser.add_argument('filenames', nargs='*')

help = subparsers.add_parser(
'help', help='Show help for a specific command.',
)
Expand Down Expand Up @@ -378,6 +396,10 @@ def main(argv: Sequence[str] | None = None) -> int:
config_file=args.config,
hook_types=args.hook_types,
)
elif args.command == 'validate-config':
return validate_config(args.filenames)
elif args.command == 'validate-manifest':
return validate_manifest(args.filenames)
else:
raise NotImplementedError(
f'Command {args.command} not implemented.',
Expand Down
16 changes: 14 additions & 2 deletions tests/clientlib_test.py
Expand Up @@ -122,8 +122,8 @@ def test_validate_config_old_list_format_ok(tmpdir, cap_out):
f = tmpdir.join('cfg.yaml')
f.write('- {repo: meta, hooks: [{id: identity}]}')
assert not validate_config_main((f.strpath,))
start = '[WARNING] normalizing pre-commit configuration to a top-level map'
assert cap_out.get().startswith(start)
msg = '[WARNING] normalizing pre-commit configuration to a top-level map'
assert msg in cap_out.get()


def test_validate_warn_on_unknown_keys_at_repo_level(tmpdir, caplog):
Expand All @@ -139,6 +139,12 @@ def test_validate_warn_on_unknown_keys_at_repo_level(tmpdir, caplog):
ret_val = validate_config_main((f.strpath,))
assert not ret_val
assert caplog.record_tuples == [
(
'pre_commit',
logging.WARNING,
'pre-commit-validate-config is deprecated -- '
'use `pre-commit validate-config` instead.',
),
(
'pre_commit',
logging.WARNING,
Expand All @@ -162,6 +168,12 @@ def test_validate_warn_on_unknown_keys_at_top_level(tmpdir, caplog):
ret_val = validate_config_main((f.strpath,))
assert not ret_val
assert caplog.record_tuples == [
(
'pre_commit',
logging.WARNING,
'pre-commit-validate-config is deprecated -- '
'use `pre-commit validate-config` instead.',
),
(
'pre_commit',
logging.WARNING,
Expand Down
1 change: 1 addition & 0 deletions tests/main_test.py
Expand Up @@ -79,6 +79,7 @@ def test_adjust_args_try_repo_repo_relative(in_git_dir):
FNS = (
'autoupdate', 'clean', 'gc', 'hook_impl', 'install', 'install_hooks',
'migrate_config', 'run', 'sample_config', 'uninstall',
'validate_config', 'validate_manifest',
)
CMDS = tuple(fn.replace('_', '-') for fn in FNS)

Expand Down

0 comments on commit 8afa837

Please sign in to comment.