Merge pull request #2746 from pre-commit/deprecate-python-venv

deprecate python_venv language
This commit is contained in:
Anthony Sottile 2023-02-04 14:58:35 -05:00 committed by GitHub
commit b609368ca5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 73 additions and 29 deletions

View file

@ -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:

View file

@ -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

View file

@ -1,5 +0,0 @@
- id: foo
name: Foo
entry: foo
language: python_venv
files: \.py$

View file

@ -1,9 +0,0 @@
from __future__ import annotations
import sys
def main():
print(repr(sys.argv[1:]))
print('Hello World')
return 0

View file

@ -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']},
)

View file

@ -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)

View 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']

View file

@ -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.'
) )