Add an option to require a specific pre-commit version

This commit is contained in:
Anthony Sottile 2015-12-06 17:40:18 -08:00
parent c24f78b1a5
commit ce307a16e0
5 changed files with 68 additions and 0 deletions

View file

@ -23,6 +23,9 @@ MANIFEST_JSON_SCHEMA = {
'exclude': {'type': 'string', 'default': '^$'},
'language': {'type': 'string'},
'language_version': {'type': 'string', 'default': 'default'},
'minimum_pre_commit_version': {
'type': 'string', 'default': '0.0.0',
},
'files': {'type': 'string'},
'stages': {
'type': 'array',

View file

@ -4,6 +4,7 @@ import logging
import shutil
from collections import defaultdict
import pkg_resources
from cached_property import cached_property
from pre_commit import git
@ -18,6 +19,10 @@ from pre_commit.prefixed_command_runner import PrefixedCommandRunner
logger = logging.getLogger('pre_commit')
_pre_commit_version = pkg_resources.parse_version(
pkg_resources.get_distribution('pre-commit').version
)
class Repository(object):
def __init__(self, repo_config, repo_path_getter):
@ -71,6 +76,18 @@ class Repository(object):
)
)
exit(1)
hook_version = pkg_resources.parse_version(
self.manifest.hooks[hook['id']]['minimum_pre_commit_version'],
)
if hook_version > _pre_commit_version:
logger.error(
'The hook `{0}` requires pre-commit version {1} but '
'version {2} is installed. '
'Perhaps run `pip install --upgrade pre-commit`.'.format(
hook['id'], hook_version, _pre_commit_version,
)
)
exit(1)
return tuple(
(hook['id'], dict(self.manifest.hooks[hook['id']], **hook))
for hook in self.repo_config['hooks']