mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 08:14:42 +04:00
Merge pull request #3312 from pre-commit/warning-for-old-stage-names
add warning for deprecated stages names
This commit is contained in:
commit
e7cfc0d2cb
2 changed files with 61 additions and 7 deletions
|
|
@ -99,6 +99,32 @@ class StagesMigration(StagesMigrationNoDefault):
|
||||||
super().apply_default(dct)
|
super().apply_default(dct)
|
||||||
|
|
||||||
|
|
||||||
|
class DeprecatedStagesWarning(NamedTuple):
|
||||||
|
key: str
|
||||||
|
|
||||||
|
def check(self, dct: dict[str, Any]) -> None:
|
||||||
|
if self.key not in dct:
|
||||||
|
return
|
||||||
|
|
||||||
|
val = dct[self.key]
|
||||||
|
cfgv.check_array(cfgv.check_any)(val)
|
||||||
|
|
||||||
|
legacy_stages = [stage for stage in val if stage in _STAGES]
|
||||||
|
if legacy_stages:
|
||||||
|
logger.warning(
|
||||||
|
f'hook id `{dct["id"]}` uses deprecated stage names '
|
||||||
|
f'({", ".join(legacy_stages)}) which will be removed in a '
|
||||||
|
f'future version. '
|
||||||
|
f'run: `pre-commit migrate-config` to automatically fix this.',
|
||||||
|
)
|
||||||
|
|
||||||
|
def apply_default(self, dct: dict[str, Any]) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def remove_default(self, dct: dict[str, Any]) -> None:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
MANIFEST_HOOK_DICT = cfgv.Map(
|
MANIFEST_HOOK_DICT = cfgv.Map(
|
||||||
'Hook', 'id',
|
'Hook', 'id',
|
||||||
|
|
||||||
|
|
@ -267,6 +293,12 @@ class NotAllowed(cfgv.OptionalNoDefault):
|
||||||
raise cfgv.ValidationError(f'{self.key!r} cannot be overridden')
|
raise cfgv.ValidationError(f'{self.key!r} cannot be overridden')
|
||||||
|
|
||||||
|
|
||||||
|
_COMMON_HOOK_WARNINGS = (
|
||||||
|
OptionalSensibleRegexAtHook('files', cfgv.check_string),
|
||||||
|
OptionalSensibleRegexAtHook('exclude', cfgv.check_string),
|
||||||
|
DeprecatedStagesWarning('stages'),
|
||||||
|
)
|
||||||
|
|
||||||
META_HOOK_DICT = cfgv.Map(
|
META_HOOK_DICT = cfgv.Map(
|
||||||
'Hook', 'id',
|
'Hook', 'id',
|
||||||
cfgv.Required('id', cfgv.check_string),
|
cfgv.Required('id', cfgv.check_string),
|
||||||
|
|
@ -289,8 +321,7 @@ META_HOOK_DICT = cfgv.Map(
|
||||||
item
|
item
|
||||||
for item in MANIFEST_HOOK_DICT.items
|
for item in MANIFEST_HOOK_DICT.items
|
||||||
),
|
),
|
||||||
OptionalSensibleRegexAtHook('files', cfgv.check_string),
|
*_COMMON_HOOK_WARNINGS,
|
||||||
OptionalSensibleRegexAtHook('exclude', cfgv.check_string),
|
|
||||||
)
|
)
|
||||||
CONFIG_HOOK_DICT = cfgv.Map(
|
CONFIG_HOOK_DICT = cfgv.Map(
|
||||||
'Hook', 'id',
|
'Hook', 'id',
|
||||||
|
|
@ -308,16 +339,13 @@ CONFIG_HOOK_DICT = cfgv.Map(
|
||||||
if item.key != 'stages'
|
if item.key != 'stages'
|
||||||
),
|
),
|
||||||
StagesMigrationNoDefault('stages', []),
|
StagesMigrationNoDefault('stages', []),
|
||||||
OptionalSensibleRegexAtHook('files', cfgv.check_string),
|
*_COMMON_HOOK_WARNINGS,
|
||||||
OptionalSensibleRegexAtHook('exclude', cfgv.check_string),
|
|
||||||
)
|
)
|
||||||
LOCAL_HOOK_DICT = cfgv.Map(
|
LOCAL_HOOK_DICT = cfgv.Map(
|
||||||
'Hook', 'id',
|
'Hook', 'id',
|
||||||
|
|
||||||
*MANIFEST_HOOK_DICT.items,
|
*MANIFEST_HOOK_DICT.items,
|
||||||
|
*_COMMON_HOOK_WARNINGS,
|
||||||
OptionalSensibleRegexAtHook('files', cfgv.check_string),
|
|
||||||
OptionalSensibleRegexAtHook('exclude', cfgv.check_string),
|
|
||||||
)
|
)
|
||||||
CONFIG_REPO_DICT = cfgv.Map(
|
CONFIG_REPO_DICT = cfgv.Map(
|
||||||
'Repository', 'repo',
|
'Repository', 'repo',
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,32 @@ def test_validate_optional_sensible_regex_at_top_level(caplog, regex, warning):
|
||||||
assert caplog.record_tuples == [('pre_commit', logging.WARNING, warning)]
|
assert caplog.record_tuples == [('pre_commit', logging.WARNING, warning)]
|
||||||
|
|
||||||
|
|
||||||
|
def test_warning_for_deprecated_stages(caplog):
|
||||||
|
config_obj = sample_local_config()
|
||||||
|
config_obj['hooks'][0]['stages'] = ['commit', 'push']
|
||||||
|
|
||||||
|
cfgv.validate(config_obj, CONFIG_REPO_DICT)
|
||||||
|
|
||||||
|
assert caplog.record_tuples == [
|
||||||
|
(
|
||||||
|
'pre_commit',
|
||||||
|
logging.WARNING,
|
||||||
|
'hook id `do_not_commit` uses deprecated stage names '
|
||||||
|
'(commit, push) which will be removed in a future version. '
|
||||||
|
'run: `pre-commit migrate-config` to automatically fix this.',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_no_warning_for_non_deprecated_stages(caplog):
|
||||||
|
config_obj = sample_local_config()
|
||||||
|
config_obj['hooks'][0]['stages'] = ['pre-commit', 'pre-push']
|
||||||
|
|
||||||
|
cfgv.validate(config_obj, CONFIG_REPO_DICT)
|
||||||
|
|
||||||
|
assert caplog.record_tuples == []
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'manifest_obj',
|
'manifest_obj',
|
||||||
(
|
(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue