1717from pre_commit import git
1818from pre_commit .clientlib import is_local_repo
1919from pre_commit .clientlib import is_meta_repo
20+ from pre_commit .clientlib import load_manifest
2021from pre_commit .clientlib import MANIFEST_HOOK_DICT
2122from pre_commit .languages .all import languages
2223from pre_commit .languages .helpers import environment_dir
23- from pre_commit .manifest import Manifest
2424from pre_commit .prefixed_command_runner import PrefixedCommandRunner
2525from pre_commit .schema import apply_defaults
2626from pre_commit .schema import validate
@@ -105,20 +105,27 @@ def _need_installed():
105105 _write_state (cmd_runner , venv , state )
106106
107107
108- def _validate_minimum_version (hook ):
109- hook_version = pkg_resources .parse_version (
110- hook ['minimum_pre_commit_version' ],
111- )
112- if hook_version > C .VERSION_PARSED :
108+ def _hook (* hook_dicts ):
109+ ret , rest = dict (hook_dicts [0 ]), hook_dicts [1 :]
110+ for dct in rest :
111+ ret .update (dct )
112+
113+ version = pkg_resources .parse_version (ret ['minimum_pre_commit_version' ])
114+ if version > C .VERSION_PARSED :
113115 logger .error (
114- 'The hook `{}` requires pre-commit version {} but '
115- 'version {} is installed. '
116+ 'The hook `{}` requires pre-commit version {} but version {} '
117+ 'is installed. '
116118 'Perhaps run `pip install --upgrade pre-commit`.' .format (
117- hook ['id' ], hook_version , C .VERSION_PARSED ,
119+ ret ['id' ], version , C .VERSION_PARSED ,
118120 ),
119121 )
120122 exit (1 )
121- return hook
123+
124+ if ret ['language_version' ] == 'default' :
125+ language = languages [ret ['language' ]]
126+ ret ['language_version' ] = language .get_default_version ()
127+
128+ return ret
122129
123130
124131class Repository (object ):
@@ -150,13 +157,14 @@ def _cmd_runner_from_deps(self, language_name, deps):
150157 return self ._cmd_runner
151158
152159 @cached_property
153- def manifest (self ):
154- return Manifest (self ._repo_path )
160+ def manifest_hooks (self ):
161+ manifest_path = os .path .join (self ._repo_path , C .MANIFEST_FILE )
162+ return {hook ['id' ]: hook for hook in load_manifest (manifest_path )}
155163
156164 @cached_property
157165 def hooks (self ):
158166 for hook in self .repo_config ['hooks' ]:
159- if hook ['id' ] not in self .manifest . hooks :
167+ if hook ['id' ] not in self .manifest_hooks :
160168 logger .error (
161169 '`{}` is not present in repository {}. '
162170 'Typo? Perhaps it is introduced in a newer version? '
@@ -166,10 +174,8 @@ def hooks(self):
166174 )
167175 exit (1 )
168176
169- _validate_minimum_version (self .manifest .hooks [hook ['id' ]])
170-
171177 return tuple (
172- (hook ['id' ], dict (self .manifest . hooks [hook ['id' ]], ** hook ))
178+ (hook ['id' ], _hook (self .manifest_hooks [hook ['id' ]], hook ))
173179 for hook in self .repo_config ['hooks' ]
174180 )
175181
@@ -220,16 +226,14 @@ def manifest(self):
220226
221227 @cached_property
222228 def hooks (self ):
229+ def _from_manifest_dct (dct ):
230+ dct = validate (dct , MANIFEST_HOOK_DICT )
231+ dct = apply_defaults (dct , MANIFEST_HOOK_DICT )
232+ dct = _hook (dct )
233+ return dct
234+
223235 return tuple (
224- (
225- hook ['id' ],
226- _validate_minimum_version (
227- apply_defaults (
228- validate (hook , MANIFEST_HOOK_DICT ),
229- MANIFEST_HOOK_DICT ,
230- ),
231- ),
232- )
236+ (hook ['id' ], _from_manifest_dct (hook ))
233237 for hook in self .repo_config ['hooks' ]
234238 )
235239
0 commit comments