Skip to content

Commit d3b5a41

Browse files
committed
Implement default_language_version
1 parent 579b05e commit d3b5a41

23 files changed

+150
-103
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ repos:
2727
rev: v1.3.0
2828
hooks:
2929
- id: reorder-python-imports
30-
language_version: python2.7
30+
language_version: python3
3131
- repo: https://github.com/asottile/add-trailing-comma
3232
rev: v0.7.1
3333
hooks:

pre_commit/clientlib.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def _make_argparser(filenames_help):
5555
cfgv.Optional('always_run', cfgv.check_bool, False),
5656
cfgv.Optional('pass_filenames', cfgv.check_bool, True),
5757
cfgv.Optional('description', cfgv.check_string, ''),
58-
cfgv.Optional('language_version', cfgv.check_string, 'default'),
58+
cfgv.Optional('language_version', cfgv.check_string, C.DEFAULT),
5959
cfgv.Optional('log_file', cfgv.check_string, ''),
6060
cfgv.Optional('minimum_pre_commit_version', cfgv.check_string, '0'),
6161
cfgv.Optional('require_serial', cfgv.check_bool, False),
@@ -90,8 +90,8 @@ def validate_manifest_main(argv=None):
9090
return ret
9191

9292

93-
_LOCAL = 'local'
94-
_META = 'meta'
93+
LOCAL = 'local'
94+
META = 'meta'
9595

9696

9797
class MigrateShaToRev(object):
@@ -100,12 +100,12 @@ def _cond(key):
100100
return cfgv.Conditional(
101101
key, cfgv.check_string,
102102
condition_key='repo',
103-
condition_value=cfgv.NotIn(_LOCAL, _META),
103+
condition_value=cfgv.NotIn(LOCAL, META),
104104
ensure_absent=True,
105105
)
106106

107107
def check(self, dct):
108-
if dct.get('repo') in {_LOCAL, _META}:
108+
if dct.get('repo') in {LOCAL, META}:
109109
self._cond('rev').check(dct)
110110
self._cond('sha').check(dct)
111111
elif 'sha' in dct and 'rev' in dct:
@@ -159,12 +159,11 @@ def _entry(modname):
159159

160160
META_HOOK_DICT = cfgv.Map(
161161
'Hook', 'id',
162+
cfgv.Required('id', cfgv.check_string),
163+
cfgv.Required('id', cfgv.check_one_of(tuple(k for k, _ in _meta))),
164+
# language must be system
165+
cfgv.Optional('language', cfgv.check_one_of({'system'}), 'system'),
162166
*([
163-
cfgv.Required('id', cfgv.check_string),
164-
cfgv.Required('id', cfgv.check_one_of(tuple(k for k, _ in _meta))),
165-
# language must be system
166-
cfgv.Optional('language', cfgv.check_one_of({'system'}), 'system'),
167-
] + [
168167
# default to the hook definition for the meta hooks
169168
cfgv.ConditionalOptional(key, cfgv.check_any, value, 'id', hook_id)
170169
for hook_id, values in _meta
@@ -200,36 +199,36 @@ def _entry(modname):
200199

201200
cfgv.ConditionalRecurse(
202201
'hooks', cfgv.Array(CONFIG_HOOK_DICT),
203-
'repo', cfgv.NotIn(_LOCAL, _META),
202+
'repo', cfgv.NotIn(LOCAL, META),
204203
),
205204
cfgv.ConditionalRecurse(
206205
'hooks', cfgv.Array(MANIFEST_HOOK_DICT),
207-
'repo', _LOCAL,
206+
'repo', LOCAL,
208207
),
209208
cfgv.ConditionalRecurse(
210209
'hooks', cfgv.Array(META_HOOK_DICT),
211-
'repo', _META,
210+
'repo', META,
212211
),
213212

214213
MigrateShaToRev(),
215214
)
215+
DEFAULT_LANGUAGE_VERSION = cfgv.Map(
216+
'DefaultLanguageVersion', None,
217+
cfgv.NoAdditionalKeys(all_languages),
218+
*[cfgv.Optional(x, cfgv.check_string, C.DEFAULT) for x in all_languages]
219+
)
216220
CONFIG_SCHEMA = cfgv.Map(
217221
'Config', None,
218222

219223
cfgv.RequiredRecurse('repos', cfgv.Array(CONFIG_REPO_DICT)),
224+
cfgv.OptionalRecurse(
225+
'default_language_version', DEFAULT_LANGUAGE_VERSION, {},
226+
),
220227
cfgv.Optional('exclude', cfgv.check_regex, '^$'),
221228
cfgv.Optional('fail_fast', cfgv.check_bool, False),
222229
)
223230

224231

225-
def is_local_repo(repo_entry):
226-
return repo_entry['repo'] == _LOCAL
227-
228-
229-
def is_meta_repo(repo_entry):
230-
return repo_entry['repo'] == _META
231-
232-
233232
class InvalidConfigError(FatalError):
234233
pass
235234

pre_commit/commands/autoupdate.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
from pre_commit import output
1414
from pre_commit.clientlib import CONFIG_SCHEMA
1515
from pre_commit.clientlib import InvalidManifestError
16-
from pre_commit.clientlib import is_local_repo
17-
from pre_commit.clientlib import is_meta_repo
1816
from pre_commit.clientlib import load_config
1917
from pre_commit.clientlib import load_manifest
18+
from pre_commit.clientlib import LOCAL
19+
from pre_commit.clientlib import META
2020
from pre_commit.commands.migrate_config import migrate_config
2121
from pre_commit.util import CalledProcessError
2222
from pre_commit.util import cmd_output
@@ -123,8 +123,7 @@ def autoupdate(config_file, store, tags_only, repos=()):
123123

124124
for repo_config in input_config['repos']:
125125
if (
126-
is_local_repo(repo_config) or
127-
is_meta_repo(repo_config) or
126+
repo_config['repo'] in {LOCAL, META} or
128127
# Skip updating any repo_configs that aren't for the specified repo
129128
repos and repo_config['repo'] not in repos
130129
):

pre_commit/commands/gc.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@
77
from pre_commit import output
88
from pre_commit.clientlib import InvalidConfigError
99
from pre_commit.clientlib import InvalidManifestError
10-
from pre_commit.clientlib import is_local_repo
11-
from pre_commit.clientlib import is_meta_repo
1210
from pre_commit.clientlib import load_config
1311
from pre_commit.clientlib import load_manifest
12+
from pre_commit.clientlib import LOCAL
13+
from pre_commit.clientlib import META
1414

1515

1616
def _mark_used_repos(store, all_repos, unused_repos, repo):
17-
if is_meta_repo(repo):
17+
if repo['repo'] == META:
1818
return
19-
elif is_local_repo(repo):
19+
elif repo['repo'] == LOCAL:
2020
for hook in repo['hooks']:
2121
deps = hook.get('additional_dependencies')
2222
unused_repos.discard((

pre_commit/commands/install_uninstall.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import os.path
77
import sys
88

9+
import pre_commit.constants as C
910
from pre_commit import git
1011
from pre_commit import output
1112
from pre_commit.clientlib import load_config
@@ -51,7 +52,7 @@ def shebang():
5152
py = 'python'
5253
else:
5354
py = python.get_default_version()
54-
if py == 'default':
55+
if py == C.DEFAULT:
5556
py = 'python'
5657
return '#!/usr/bin/env {}'.format(py)
5758

pre_commit/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@
2222

2323
# `manual` is not invoked by any installed git hook. See #719
2424
STAGES = ('commit', 'commit-msg', 'manual', 'push')
25+
26+
DEFAULT = 'default'

pre_commit/languages/all.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@
3535
#
3636
# Args:
3737
# prefix - `Prefix` bound to the repository.
38-
# version - A version specified in the hook configuration or
39-
# 'default'.
38+
# version - A version specified in the hook configuration or 'default'.
4039
# """
4140
#
4241
# def run_hook(hook, file_args):

pre_commit/languages/docker.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import hashlib
55
import os
66

7+
import pre_commit.constants as C
78
from pre_commit import five
89
from pre_commit.languages import helpers
910
from pre_commit.util import CalledProcessError
@@ -62,7 +63,7 @@ def install_environment(
6263
assert_docker_available()
6364

6465
directory = prefix.path(
65-
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
66+
helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT),
6667
)
6768

6869
# Docker doesn't really have relevant disk environment, but pre-commit

pre_commit/languages/golang.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os.path
55
import sys
66

7+
import pre_commit.constants as C
78
from pre_commit import git
89
from pre_commit.envcontext import envcontext
910
from pre_commit.envcontext import Var
@@ -27,7 +28,7 @@ def get_env_patch(venv):
2728
@contextlib.contextmanager
2829
def in_env(prefix):
2930
envdir = prefix.path(
30-
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
31+
helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT),
3132
)
3233
with envcontext(get_env_patch(envdir)):
3334
yield
@@ -52,7 +53,7 @@ def guess_go_dir(remote_url):
5253
def install_environment(prefix, version, additional_dependencies):
5354
helpers.assert_version_default('golang', version)
5455
directory = prefix.path(
55-
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
56+
helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT),
5657
)
5758

5859
with clean_path_on_failure(directory):

pre_commit/languages/helpers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77

88
import six
99

10+
import pre_commit.constants as C
1011
from pre_commit.util import cmd_output
1112
from pre_commit.xargs import xargs
1213

13-
1414
FIXED_RANDOM_SEED = 1542676186
1515

1616

@@ -30,7 +30,7 @@ def to_cmd(hook):
3030

3131

3232
def assert_version_default(binary, version):
33-
if version != 'default':
33+
if version != C.DEFAULT:
3434
raise AssertionError(
3535
'For now, pre-commit requires system-installed {}'.format(binary),
3636
)
@@ -45,7 +45,7 @@ def assert_no_additional_deps(lang, additional_deps):
4545

4646

4747
def basic_get_default_version():
48-
return 'default'
48+
return C.DEFAULT
4949

5050

5151
def basic_healthy(prefix, language_version):

0 commit comments

Comments
 (0)