Merge pull request #2362 from pre-commit/deprecate-separate-entry-points

deprecate pre-commit-validate-{config,manifest}
This commit is contained in:
Anthony Sottile 2022-04-24 20:03:35 -04:00 committed by GitHub
commit 7f189260e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 93 additions and 26 deletions

View file

@ -1,6 +1,6 @@
- id: validate_manifest - id: validate_manifest
name: validate pre-commit manifest name: validate pre-commit manifest
description: This validator validates a pre-commit hooks manifest file description: This validator validates a pre-commit hooks manifest file
entry: pre-commit-validate-manifest entry: pre-commit validate-manifest
language: python language: python
files: ^(\.pre-commit-hooks\.yaml|hooks\.yaml)$ files: ^\.pre-commit-hooks\.yaml$

View file

@ -10,7 +10,7 @@ resources:
type: github type: github
endpoint: github endpoint: github
name: asottile/azure-pipeline-templates name: asottile/azure-pipeline-templates
ref: refs/tags/v2.1.0 ref: refs/tags/v2.4.1
jobs: jobs:
- template: job--python-tox.yml@asottile - template: job--python-tox.yml@asottile

View file

@ -14,6 +14,8 @@ from identify.identify import ALL_TAGS
import pre_commit.constants as C import pre_commit.constants as C
from pre_commit.color import add_color_option 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.errors import FatalError
from pre_commit.languages.all import all_languages from pre_commit.languages.all import all_languages
from pre_commit.logging_handler import logging_handler from pre_commit.logging_handler import logging_handler
@ -100,14 +102,12 @@ def validate_manifest_main(argv: Sequence[str] | None = None) -> int:
args = parser.parse_args(argv) args = parser.parse_args(argv)
with logging_handler(args.color): with logging_handler(args.color):
ret = 0 logger.warning(
for filename in args.filenames: 'pre-commit-validate-manifest is deprecated -- '
try: 'use `pre-commit validate-manifest` instead.',
load_manifest(filename) )
except InvalidManifestError as e:
print(e) return validate_manifest(args.filenames)
ret = 1
return ret
LOCAL = 'local' LOCAL = 'local'
@ -409,11 +409,9 @@ def validate_config_main(argv: Sequence[str] | None = None) -> int:
args = parser.parse_args(argv) args = parser.parse_args(argv)
with logging_handler(args.color): with logging_handler(args.color):
ret = 0 logger.warning(
for filename in args.filenames: 'pre-commit-validate-config is deprecated -- '
try: 'use `pre-commit validate-config` instead.',
load_config(filename) )
except InvalidConfigError as e:
print(e) return validate_config(args.filenames)
ret = 1
return ret

View file

@ -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

View file

@ -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

View file

@ -21,6 +21,8 @@ from pre_commit.commands.migrate_config import migrate_config
from pre_commit.commands.run import run from pre_commit.commands.run import run
from pre_commit.commands.sample_config import sample_config from pre_commit.commands.sample_config import sample_config
from pre_commit.commands.try_repo import try_repo 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.error_handler import error_handler
from pre_commit.logging_handler import logging_handler from pre_commit.logging_handler import logging_handler
from pre_commit.store import Store from pre_commit.store import Store
@ -34,8 +36,10 @@ logger = logging.getLogger('pre_commit')
# pyvenv # pyvenv
os.environ.pop('__PYVENV_LAUNCHER__', None) os.environ.pop('__PYVENV_LAUNCHER__', None)
COMMANDS_NO_GIT = {
COMMANDS_NO_GIT = {'clean', 'gc', 'init-templatedir', 'sample-config'} 'clean', 'gc', 'init-templatedir', 'sample-config',
'validate-config', 'validate-manifest',
}
def _add_config_option(parser: argparse.ArgumentParser) -> None: def _add_config_option(parser: argparse.ArgumentParser) -> None:
@ -304,6 +308,20 @@ def main(argv: Sequence[str] | None = None) -> int:
_add_config_option(uninstall_parser) _add_config_option(uninstall_parser)
_add_hook_type_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 = subparsers.add_parser(
'help', help='Show help for a specific command.', 'help', help='Show help for a specific command.',
) )
@ -378,6 +396,10 @@ def main(argv: Sequence[str] | None = None) -> int:
config_file=args.config, config_file=args.config,
hook_types=args.hook_types, 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: else:
raise NotImplementedError( raise NotImplementedError(
f'Command {args.command} not implemented.', f'Command {args.command} not implemented.',

View file

@ -3,9 +3,9 @@
set -euo pipefail set -euo pipefail
. /etc/lsb-release . /etc/lsb-release
if [ "$DISTRIB_CODENAME" = "bionic" ]; then if [ "$DISTRIB_CODENAME" = "focal" ]; then
SWIFT_URL='https://swift.org/builds/swift-5.1.3-release/ubuntu1804/swift-5.1.3-RELEASE/swift-5.1.3-RELEASE-ubuntu18.04.tar.gz' SWIFT_URL='https://download.swift.org/swift-5.6.1-release/ubuntu2004/swift-5.6.1-RELEASE/swift-5.6.1-RELEASE-ubuntu20.04.tar.gz'
SWIFT_HASH='ac82ccd773fe3d586fc340814e31e120da1ff695c6a712f6634e9cc720769610' SWIFT_HASH='2b4f22d4a8b59fe8e050f0b7f020f8d8f12553cbda56709b2340a4a3bb90cfea'
else else
echo "unknown dist: ${DISTRIB_CODENAME}" 1>&2 echo "unknown dist: ${DISTRIB_CODENAME}" 1>&2
exit 1 exit 1

View file

@ -122,8 +122,8 @@ def test_validate_config_old_list_format_ok(tmpdir, cap_out):
f = tmpdir.join('cfg.yaml') f = tmpdir.join('cfg.yaml')
f.write('- {repo: meta, hooks: [{id: identity}]}') f.write('- {repo: meta, hooks: [{id: identity}]}')
assert not validate_config_main((f.strpath,)) assert not validate_config_main((f.strpath,))
start = '[WARNING] normalizing pre-commit configuration to a top-level map' msg = '[WARNING] normalizing pre-commit configuration to a top-level map'
assert cap_out.get().startswith(start) assert msg in cap_out.get()
def test_validate_warn_on_unknown_keys_at_repo_level(tmpdir, caplog): def test_validate_warn_on_unknown_keys_at_repo_level(tmpdir, caplog):
@ -139,6 +139,12 @@ def test_validate_warn_on_unknown_keys_at_repo_level(tmpdir, caplog):
ret_val = validate_config_main((f.strpath,)) ret_val = validate_config_main((f.strpath,))
assert not ret_val assert not ret_val
assert caplog.record_tuples == [ assert caplog.record_tuples == [
(
'pre_commit',
logging.WARNING,
'pre-commit-validate-config is deprecated -- '
'use `pre-commit validate-config` instead.',
),
( (
'pre_commit', 'pre_commit',
logging.WARNING, logging.WARNING,
@ -162,6 +168,12 @@ def test_validate_warn_on_unknown_keys_at_top_level(tmpdir, caplog):
ret_val = validate_config_main((f.strpath,)) ret_val = validate_config_main((f.strpath,))
assert not ret_val assert not ret_val
assert caplog.record_tuples == [ assert caplog.record_tuples == [
(
'pre_commit',
logging.WARNING,
'pre-commit-validate-config is deprecated -- '
'use `pre-commit validate-config` instead.',
),
( (
'pre_commit', 'pre_commit',
logging.WARNING, logging.WARNING,

View file

@ -79,6 +79,7 @@ def test_adjust_args_try_repo_repo_relative(in_git_dir):
FNS = ( FNS = (
'autoupdate', 'clean', 'gc', 'hook_impl', 'install', 'install_hooks', 'autoupdate', 'clean', 'gc', 'hook_impl', 'install', 'install_hooks',
'migrate_config', 'run', 'sample_config', 'uninstall', 'migrate_config', 'run', 'sample_config', 'uninstall',
'validate_config', 'validate_manifest',
) )
CMDS = tuple(fn.replace('_', '-') for fn in FNS) CMDS = tuple(fn.replace('_', '-') for fn in FNS)

View file

@ -173,6 +173,7 @@ def test_python_venv(tempdir_factory, store):
) )
@xfailif_windows # pragma: win32 no cover # no python 2 in GHA
def test_switch_language_versions_doesnt_clobber(tempdir_factory, store): def test_switch_language_versions_doesnt_clobber(tempdir_factory, store):
# We're using the python3 repo because it prints the python version # We're using the python3 repo because it prints the python version
path = make_repo(tempdir_factory, 'python3_hooks_repo') path = make_repo(tempdir_factory, 'python3_hooks_repo')
@ -892,6 +893,7 @@ def test_local_python_repo(store, local_python_config):
assert _norm_out(out) == b"3\n['filename']\nHello World\n" assert _norm_out(out) == b"3\n['filename']\nHello World\n"
@xfailif_windows # pragma: win32 no cover # no python2 in GHA
def test_local_python_repo_python2(store, local_python_config): def test_local_python_repo_python2(store, local_python_config):
local_python_config['hooks'][0]['language_version'] = 'python2' local_python_config['hooks'][0]['language_version'] = 'python2'
hook = _get_hook(local_python_config, store, 'python3-hook') hook = _get_hook(local_python_config, store, 'python3-hook')