mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-19 17:14:43 +04:00
Merge pull request #2746 from pre-commit/deprecate-python-venv
deprecate python_venv language
This commit is contained in:
commit
b609368ca5
8 changed files with 73 additions and 29 deletions
|
|
@ -42,6 +42,14 @@ def _migrate_sha_to_rev(contents: str) -> str:
|
||||||
return re.sub(r'(\n\s+)sha:', r'\1rev:', contents)
|
return re.sub(r'(\n\s+)sha:', r'\1rev:', contents)
|
||||||
|
|
||||||
|
|
||||||
|
def _migrate_python_venv(contents: str) -> str:
|
||||||
|
return re.sub(
|
||||||
|
r'(\n\s+)language: python_venv\b',
|
||||||
|
r'\1language: python',
|
||||||
|
contents,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def migrate_config(config_file: str, quiet: bool = False) -> int:
|
def migrate_config(config_file: str, quiet: bool = False) -> int:
|
||||||
with open(config_file) as f:
|
with open(config_file) as f:
|
||||||
orig_contents = contents = f.read()
|
orig_contents = contents = f.read()
|
||||||
|
|
@ -55,6 +63,7 @@ def migrate_config(config_file: str, quiet: bool = False) -> int:
|
||||||
|
|
||||||
contents = _migrate_map(contents)
|
contents = _migrate_map(contents)
|
||||||
contents = _migrate_sha_to_rev(contents)
|
contents = _migrate_sha_to_rev(contents)
|
||||||
|
contents = _migrate_python_venv(contents)
|
||||||
|
|
||||||
if contents != orig_contents:
|
if contents != orig_contents:
|
||||||
with open(config_file, 'w') as f:
|
with open(config_file, 'w') as f:
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import shlex
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
|
|
||||||
|
|
@ -68,6 +69,14 @@ def _hook_install(hook: Hook) -> None:
|
||||||
logger.info('Once installed this environment will be reused.')
|
logger.info('Once installed this environment will be reused.')
|
||||||
logger.info('This may take a few minutes...')
|
logger.info('This may take a few minutes...')
|
||||||
|
|
||||||
|
if hook.language == 'python_venv':
|
||||||
|
logger.warning(
|
||||||
|
f'`repo: {hook.src}` uses deprecated `language: python_venv`. '
|
||||||
|
f'This is an alias for `language: python`. '
|
||||||
|
f'Often `pre-commit autoupdate --repo {shlex.quote(hook.src)}` '
|
||||||
|
f'will fix this.',
|
||||||
|
)
|
||||||
|
|
||||||
lang = languages[hook.language]
|
lang = languages[hook.language]
|
||||||
assert lang.ENVIRONMENT_DIR is not None
|
assert lang.ENVIRONMENT_DIR is not None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
- id: foo
|
|
||||||
name: Foo
|
|
||||||
entry: foo
|
|
||||||
language: python_venv
|
|
||||||
files: \.py$
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
print(repr(sys.argv[1:]))
|
|
||||||
print('Hello World')
|
|
||||||
return 0
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from setuptools import setup
|
|
||||||
|
|
||||||
setup(
|
|
||||||
name='foo',
|
|
||||||
version='0.0.0',
|
|
||||||
py_modules=['foo'],
|
|
||||||
entry_points={'console_scripts': ['foo = foo:main']},
|
|
||||||
)
|
|
||||||
|
|
@ -134,6 +134,39 @@ def test_migrate_config_sha_to_rev(tmpdir):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_migrate_config_language_python_venv(tmp_path):
|
||||||
|
src = '''\
|
||||||
|
repos:
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: example
|
||||||
|
name: example
|
||||||
|
entry: example
|
||||||
|
language: python_venv
|
||||||
|
- id: example
|
||||||
|
name: example
|
||||||
|
entry: example
|
||||||
|
language: system
|
||||||
|
'''
|
||||||
|
expected = '''\
|
||||||
|
repos:
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: example
|
||||||
|
name: example
|
||||||
|
entry: example
|
||||||
|
language: python
|
||||||
|
- id: example
|
||||||
|
name: example
|
||||||
|
entry: example
|
||||||
|
language: system
|
||||||
|
'''
|
||||||
|
cfg = tmp_path.joinpath('cfg.yaml')
|
||||||
|
cfg.write_text(src)
|
||||||
|
assert migrate_config(str(cfg)) == 0
|
||||||
|
assert cfg.read_text() == expected
|
||||||
|
|
||||||
|
|
||||||
def test_migrate_config_invalid_yaml(tmpdir):
|
def test_migrate_config_invalid_yaml(tmpdir):
|
||||||
contents = '['
|
contents = '['
|
||||||
cfg = tmpdir.join(C.CONFIG_FILE)
|
cfg = tmpdir.join(C.CONFIG_FILE)
|
||||||
|
|
|
||||||
7
tests/languages/all_test.py
Normal file
7
tests/languages/all_test.py
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from pre_commit.languages.all import languages
|
||||||
|
|
||||||
|
|
||||||
|
def test_python_venv_is_an_alias_to_python():
|
||||||
|
assert languages['python_venv'] is languages['python']
|
||||||
|
|
@ -129,11 +129,21 @@ def test_python_hook_weird_setup_cfg(in_git_dir, tempdir_factory, store):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_python_venv(tempdir_factory, store):
|
def test_python_venv_deprecation(store, caplog):
|
||||||
_test_hook_repo(
|
config = {
|
||||||
tempdir_factory, store, 'python_venv_hooks_repo',
|
'repo': 'local',
|
||||||
'foo', [os.devnull],
|
'hooks': [{
|
||||||
f'[{os.devnull!r}]\nHello World\n'.encode(),
|
'id': 'example',
|
||||||
|
'name': 'example',
|
||||||
|
'language': 'python_venv',
|
||||||
|
'entry': 'echo hi',
|
||||||
|
}],
|
||||||
|
}
|
||||||
|
_get_hook(config, store, 'example')
|
||||||
|
assert caplog.messages[-1] == (
|
||||||
|
'`repo: local` uses deprecated `language: python_venv`. '
|
||||||
|
'This is an alias for `language: python`. '
|
||||||
|
'Often `pre-commit autoupdate --repo local` will fix this.'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue