Merge pull request #1268 from pre-commit/remove_prce

Remove deprecated `pcre` language
This commit is contained in:
Anthony Sottile
2020-01-08 20:03:52 -08:00
committed by GitHub
9 changed files with 18 additions and 139 deletions

View File

@@ -82,14 +82,6 @@ def _subtle_line(s, use_color):
def _run_single_hook(classifier, hook, skips, cols, verbose, use_color):
filenames = classifier.filenames_for_hook(hook)
if hook.language == 'pcre':
logger.warning(
'`{}` (from {}) uses the deprecated pcre language.\n'
'The pcre language is scheduled for removal in pre-commit 2.x.\n'
'The pygrep language is a more portable (and usually drop-in) '
'replacement.'.format(hook.id, hook.src),
)
if hook.id in skips or hook.alias in skips:
output.write(
get_hook_message(

View File

@@ -6,7 +6,6 @@ from pre_commit.languages import docker_image
from pre_commit.languages import fail
from pre_commit.languages import golang
from pre_commit.languages import node
from pre_commit.languages import pcre
from pre_commit.languages import pygrep
from pre_commit.languages import python
from pre_commit.languages import python_venv
@@ -59,7 +58,6 @@ languages = {
'fail': fail,
'golang': golang,
'node': node,
'pcre': pcre,
'pygrep': pygrep,
'python': python,
'python_venv': python_venv,

View File

@@ -1,22 +0,0 @@
from __future__ import unicode_literals
import sys
from pre_commit.languages import helpers
from pre_commit.xargs import xargs
ENVIRONMENT_DIR = None
GREP = 'ggrep' if sys.platform == 'darwin' else 'grep'
get_default_version = helpers.basic_get_default_version
healthy = helpers.basic_healthy
install_environment = helpers.no_install
def run_hook(hook, file_args, color):
# For PCRE the entry is the regular expression to match
cmd = (GREP, '-H', '-n', '-P') + tuple(hook.args) + (hook.entry,)
# Grep usually returns 0 for matches, and nonzero for non-matches so we
# negate it here.
return xargs(cmd, file_args, negate=True, color=color)

View File

@@ -149,7 +149,7 @@ def _hook(*hook_dicts, **kwargs):
def _non_cloned_repository_hooks(repo_config, store, root_config):
def _prefix(language_name, deps):
language = languages[language_name]
# pcre / pygrep / script / system / docker_image do not have
# pygrep / script / system / docker_image do not have
# environments so they work out of the current directory
if language.ENVIRONMENT_DIR is None:
return Prefix(os.getcwd())

View File

@@ -107,11 +107,9 @@ def xargs(cmd, varargs, **kwargs):
"""A simplified implementation of xargs.
color: Make a pty if on a platform that supports it
negate: Make nonzero successful and zero a failure
target_concurrency: Target number of partitions to run concurrently
"""
color = kwargs.pop('color', False)
negate = kwargs.pop('negate', False)
target_concurrency = kwargs.pop('target_concurrency', 1)
max_length = kwargs.pop('_max_length', _get_platform_max_length())
cmd_fn = cmd_output_p if color else cmd_output_b
@@ -135,8 +133,6 @@ def xargs(cmd, varargs, **kwargs):
results = thread_map(run_cmd_partition, partitions)
for proc_retcode, proc_out, _ in results:
if negate:
proc_retcode = not proc_retcode
retcode = max(retcode, proc_retcode)
stdout += proc_out

View File

@@ -9,7 +9,6 @@ import pytest
from pre_commit import parse_shebang
from pre_commit.languages.docker import docker_is_running
from pre_commit.languages.pcre import GREP
from pre_commit.util import cmd_output
from testing.auto_namedtuple import auto_namedtuple
@@ -68,16 +67,6 @@ xfailif_broken_deep_listdir = pytest.mark.xfail(
)
def platform_supports_pcre():
output = cmd_output(GREP, '-P', "Don't", 'CHANGELOG.md', retcode=None)
return output[0] == 0 and "Don't use readlink -f" in output[1]
xfailif_no_pcre_support = pytest.mark.xfail(
not platform_supports_pcre(),
reason='grep -P is not supported on this platform',
)
xfailif_no_symlink = pytest.mark.xfail(
not hasattr(os, 'symlink'),
reason='Symlink is not supported on this platform',

View File

@@ -734,32 +734,6 @@ def test_local_hook_fails(cap_out, store, repo_with_passing_hook):
)
def test_pcre_deprecation_warning(cap_out, store, repo_with_passing_hook):
config = {
'repo': 'local',
'hooks': [{
'id': 'pcre-hook',
'name': 'pcre-hook',
'language': 'pcre',
'entry': '.',
}],
}
add_config_to_repo(repo_with_passing_hook, config)
_test_run(
cap_out,
store,
repo_with_passing_hook,
opts={},
expected_outputs=[
b'[WARNING] `pcre-hook` (from local) uses the deprecated '
b'pcre language.',
],
expected_ret=0,
stage=False,
)
def test_meta_hook_passes(cap_out, store, repo_with_passing_hook):
add_config_to_repo(repo_with_passing_hook, sample_meta_config())

View File

@@ -12,14 +12,12 @@ import pytest
import pre_commit.constants as C
from pre_commit import five
from pre_commit import parse_shebang
from pre_commit.clientlib import CONFIG_SCHEMA
from pre_commit.clientlib import load_manifest
from pre_commit.envcontext import envcontext
from pre_commit.languages import golang
from pre_commit.languages import helpers
from pre_commit.languages import node
from pre_commit.languages import pcre
from pre_commit.languages import python
from pre_commit.languages import ruby
from pre_commit.languages import rust
@@ -37,7 +35,6 @@ from testing.util import get_resource_path
from testing.util import skipif_cant_run_docker
from testing.util import skipif_cant_run_swift
from testing.util import xfailif_broken_deep_listdir
from testing.util import xfailif_no_pcre_support
from testing.util import xfailif_no_venv
from testing.util import xfailif_windows_no_ruby
@@ -426,13 +423,13 @@ def test_output_isatty(tempdir_factory, store):
)
def _make_grep_repo(language, entry, store, args=()):
def _make_grep_repo(entry, store, args=()):
config = {
'repo': 'local',
'hooks': [{
'id': 'grep-hook',
'name': 'grep-hook',
'language': language,
'language': 'pygrep',
'entry': entry,
'args': args,
'types': ['text'],
@@ -451,53 +448,25 @@ def greppable_files(tmpdir):
yield tmpdir
class TestPygrep(object):
language = 'pygrep'
def test_grep_hook_matching(self, greppable_files, store):
hook = _make_grep_repo(self.language, 'ello', store)
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert ret == 1
assert _norm_out(out) == b"f1:1:hello'hi\n"
def test_grep_hook_case_insensitive(self, greppable_files, store):
hook = _make_grep_repo(self.language, 'ELLO', store, args=['-i'])
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert ret == 1
assert _norm_out(out) == b"f1:1:hello'hi\n"
@pytest.mark.parametrize('regex', ('nope', "foo'bar", r'^\[INFO\]'))
def test_grep_hook_not_matching(self, regex, greppable_files, store):
hook = _make_grep_repo(self.language, regex, store)
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert (ret, out) == (0, b'')
def test_grep_hook_matching(greppable_files, store):
hook = _make_grep_repo('ello', store)
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert ret == 1
assert _norm_out(out) == b"f1:1:hello'hi\n"
@xfailif_no_pcre_support # pragma: windows no cover
class TestPCRE(TestPygrep):
"""organized as a class for xfailing pcre"""
language = 'pcre'
def test_grep_hook_case_insensitive(greppable_files, store):
hook = _make_grep_repo('ELLO', store, args=['-i'])
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert ret == 1
assert _norm_out(out) == b"f1:1:hello'hi\n"
def test_pcre_hook_many_files(self, greppable_files, store):
# This is intended to simulate lots of passing files and one failing
# file to make sure it still fails. This is not the case when naively
# using a system hook with `grep -H -n '...'`
hook = _make_grep_repo('pcre', 'ello', store)
ret, out = hook.run((os.devnull,) * 15000 + ('f1',), color=False)
assert ret == 1
assert _norm_out(out) == b"f1:1:hello'hi\n"
def test_missing_pcre_support(self, greppable_files, store):
def no_grep(exe, **kwargs):
assert exe == pcre.GREP
return None
with mock.patch.object(parse_shebang, 'find_executable', no_grep):
hook = _make_grep_repo('pcre', 'ello', store)
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert ret == 1
expected = 'Executable `{}` not found'.format(pcre.GREP).encode()
assert out == expected
@pytest.mark.parametrize('regex', ('nope', "foo'bar", r'^\[INFO\]'))
def test_grep_hook_not_matching(regex, greppable_files, store):
hook = _make_grep_repo(regex, store)
ret, out = hook.run(('f1', 'f2', 'f3'), color=False)
assert (ret, out) == (0, b'')
def _norm_pwd(path):

View File

@@ -154,23 +154,6 @@ exit_cmd = parse_shebang.normalize_cmd(('bash', '-c', 'exit $1', '--'))
max_length = len(' '.join(exit_cmd)) + 3
def test_xargs_negate():
ret, _ = xargs.xargs(
exit_cmd, ('1',), negate=True, _max_length=max_length,
)
assert ret == 0
ret, _ = xargs.xargs(
exit_cmd, ('1', '0'), negate=True, _max_length=max_length,
)
assert ret == 1
def test_xargs_negate_command_not_found():
ret, _ = xargs.xargs(('cmd-not-found',), ('1',), negate=True)
assert ret != 0
def test_xargs_retcode_normal():
ret, _ = xargs.xargs(exit_cmd, ('0',), _max_length=max_length)
assert ret == 0