summaryrefslogtreecommitdiffstats
path: root/pre_commit/clientlib.py
diff options
context:
space:
mode:
Diffstat (limited to 'pre_commit/clientlib.py')
-rw-r--r--pre_commit/clientlib.py106
1 files changed, 12 insertions, 94 deletions
diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py
index da6ca2b..e191d3a 100644
--- a/pre_commit/clientlib.py
+++ b/pre_commit/clientlib.py
@@ -1,6 +1,5 @@
from __future__ import annotations
-import argparse
import functools
import logging
import re
@@ -13,14 +12,9 @@ import cfgv
from identify.identify import ALL_TAGS
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
-from pre_commit.util import parse_version
-from pre_commit.util import yaml_load
+from pre_commit.yaml import yaml_load
logger = logging.getLogger('pre_commit')
@@ -35,6 +29,11 @@ def check_type_tag(tag: str) -> None:
)
+def parse_version(s: str) -> tuple[int, ...]:
+ """poor man's version comparison"""
+ return tuple(int(p) for p in s.split('.'))
+
+
def check_min_version(version: str) -> None:
if parse_version(version) > parse_version(C.VERSION):
raise cfgv.ValidationError(
@@ -44,14 +43,6 @@ def check_min_version(version: str) -> None:
)
-def _make_argparser(filenames_help: str) -> argparse.ArgumentParser:
- parser = argparse.ArgumentParser()
- parser.add_argument('filenames', nargs='*', help=filenames_help)
- parser.add_argument('-V', '--version', action='version', version=C.VERSION)
- add_color_option(parser)
- return parser
-
-
MANIFEST_HOOK_DICT = cfgv.Map(
'Hook', 'id',
@@ -97,25 +88,11 @@ load_manifest = functools.partial(
)
-def validate_manifest_main(argv: Sequence[str] | None = None) -> int:
- parser = _make_argparser('Manifest filenames.')
- args = parser.parse_args(argv)
-
- with logging_handler(args.color):
- logger.warning(
- 'pre-commit-validate-manifest is deprecated -- '
- 'use `pre-commit validate-manifest` instead.',
- )
-
- return validate_manifest(args.filenames)
-
-
LOCAL = 'local'
META = 'meta'
-# should inherit from cfgv.Conditional if sha support is dropped
-class WarnMutableRev(cfgv.ConditionalOptional):
+class WarnMutableRev(cfgv.Conditional):
def check(self, dct: dict[str, Any]) -> None:
super().check(dct)
@@ -171,36 +148,6 @@ class OptionalSensibleRegexAtTop(cfgv.OptionalNoDefault):
)
-class MigrateShaToRev:
- key = 'rev'
-
- @staticmethod
- def _cond(key: str) -> cfgv.Conditional:
- return cfgv.Conditional(
- key, cfgv.check_string,
- condition_key='repo',
- condition_value=cfgv.NotIn(LOCAL, META),
- ensure_absent=True,
- )
-
- def check(self, dct: dict[str, Any]) -> None:
- if dct.get('repo') in {LOCAL, META}:
- self._cond('rev').check(dct)
- self._cond('sha').check(dct)
- elif 'sha' in dct and 'rev' in dct:
- raise cfgv.ValidationError('Cannot specify both sha and rev')
- elif 'sha' in dct:
- self._cond('sha').check(dct)
- else:
- self._cond('rev').check(dct)
-
- def apply_default(self, dct: dict[str, Any]) -> None:
- if 'sha' in dct:
- dct['rev'] = dct.pop('sha')
-
- remove_default = cfgv.Required.remove_default
-
-
def _entry(modname: str) -> str:
"""the hook `entry` is passed through `shlex.split()` by the command
runner, so to prevent issues with spaces and backslashes (on Windows)
@@ -324,14 +271,11 @@ CONFIG_REPO_DICT = cfgv.Map(
'repo', META,
),
- MigrateShaToRev(),
WarnMutableRev(
- 'rev',
- cfgv.check_string,
- '',
- 'repo',
- cfgv.NotIn(LOCAL, META),
- True,
+ 'rev', cfgv.check_string,
+ condition_key='repo',
+ condition_value=cfgv.NotIn(LOCAL, META),
+ ensure_absent=True,
),
cfgv.WarnAdditionalKeys(('repo', 'rev', 'hooks'), warn_unknown_keys_repo),
)
@@ -391,35 +335,9 @@ class InvalidConfigError(FatalError):
pass
-def ordered_load_normalize_legacy_config(contents: str) -> dict[str, Any]:
- data = yaml_load(contents)
- if isinstance(data, list):
- logger.warning(
- 'normalizing pre-commit configuration to a top-level map. '
- 'support for top level list will be removed in a future version. '
- 'run: `pre-commit migrate-config` to automatically fix this.',
- )
- return {'repos': data}
- else:
- return data
-
-
load_config = functools.partial(
cfgv.load_from_filename,
schema=CONFIG_SCHEMA,
- load_strategy=ordered_load_normalize_legacy_config,
+ load_strategy=yaml_load,
exc_tp=InvalidConfigError,
)
-
-
-def validate_config_main(argv: Sequence[str] | None = None) -> int:
- parser = _make_argparser('Config filenames.')
- args = parser.parse_args(argv)
-
- with logging_handler(args.color):
- logger.warning(
- 'pre-commit-validate-config is deprecated -- '
- 'use `pre-commit validate-config` instead.',
- )
-
- return validate_config(args.filenames)