Skip to content

Commit 844dacc

Browse files
committed
add forward-compat error message
1 parent 1b32c50 commit 844dacc

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

pre_commit/clientlib.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,19 @@ class InvalidManifestError(FatalError):
270270
pass
271271

272272

273+
def _load_manifest_forward_compat(contents: str) -> object:
274+
obj = yaml_load(contents)
275+
if isinstance(obj, dict):
276+
check_min_version('5')
277+
raise AssertionError('unreachable')
278+
else:
279+
return obj
280+
281+
273282
load_manifest = functools.partial(
274283
cfgv.load_from_filename,
275284
schema=MANIFEST_SCHEMA,
276-
load_strategy=yaml_load,
285+
load_strategy=_load_manifest_forward_compat,
277286
exc_tp=InvalidManifestError,
278287
)
279288

tests/clientlib_test.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from pre_commit.clientlib import CONFIG_REPO_DICT
1313
from pre_commit.clientlib import CONFIG_SCHEMA
1414
from pre_commit.clientlib import DEFAULT_LANGUAGE_VERSION
15+
from pre_commit.clientlib import InvalidManifestError
16+
from pre_commit.clientlib import load_manifest
1517
from pre_commit.clientlib import MANIFEST_HOOK_DICT
1618
from pre_commit.clientlib import MANIFEST_SCHEMA
1719
from pre_commit.clientlib import META_HOOK_DICT
@@ -588,3 +590,18 @@ def test_config_hook_stages_defaulting():
588590
'id': 'fake-hook',
589591
'stages': ['commit-msg', 'pre-push', 'pre-commit', 'pre-merge-commit'],
590592
}
593+
594+
595+
def test_manifest_v5_forward_compat(tmp_path):
596+
manifest = tmp_path.joinpath('.pre-commit-hooks.yaml')
597+
manifest.write_text('hooks: {}')
598+
599+
with pytest.raises(InvalidManifestError) as excinfo:
600+
load_manifest(manifest)
601+
assert str(excinfo.value) == (
602+
f'\n'
603+
f'==> File {manifest}\n'
604+
f'=====> \n'
605+
f'=====> pre-commit version 5 is required but version {C.VERSION} '
606+
f'is installed. Perhaps run `pip install --upgrade pre-commit`.'
607+
)

0 commit comments

Comments
 (0)