Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bb29630

Browse files
committed
First cut at Perl hook support
1 parent f0ee93c commit bb29630

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

pre_commit/languages/all.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from pre_commit.languages import fail
1212
from pre_commit.languages import golang
1313
from pre_commit.languages import node
14+
from pre_commit.languages import perl
1415
from pre_commit.languages import pygrep
1516
from pre_commit.languages import python
1617
from pre_commit.languages import python_venv
@@ -45,6 +46,7 @@ class Language(NamedTuple):
4546
'fail': Language(name='fail', ENVIRONMENT_DIR=fail.ENVIRONMENT_DIR, get_default_version=fail.get_default_version, healthy=fail.healthy, install_environment=fail.install_environment, run_hook=fail.run_hook), # noqa: E501
4647
'golang': Language(name='golang', ENVIRONMENT_DIR=golang.ENVIRONMENT_DIR, get_default_version=golang.get_default_version, healthy=golang.healthy, install_environment=golang.install_environment, run_hook=golang.run_hook), # noqa: E501
4748
'node': Language(name='node', ENVIRONMENT_DIR=node.ENVIRONMENT_DIR, get_default_version=node.get_default_version, healthy=node.healthy, install_environment=node.install_environment, run_hook=node.run_hook), # noqa: E501
49+
'perl': Language(name='perl', ENVIRONMENT_DIR=perl.ENVIRONMENT_DIR, get_default_version=perl.get_default_version, healthy=perl.healthy, install_environment=perl.install_environment, run_hook=perl.run_hook), # noqa: E501
4850
'pygrep': Language(name='pygrep', ENVIRONMENT_DIR=pygrep.ENVIRONMENT_DIR, get_default_version=pygrep.get_default_version, healthy=pygrep.healthy, install_environment=pygrep.install_environment, run_hook=pygrep.run_hook), # noqa: E501
4951
'python': Language(name='python', ENVIRONMENT_DIR=python.ENVIRONMENT_DIR, get_default_version=python.get_default_version, healthy=python.healthy, install_environment=python.install_environment, run_hook=python.run_hook), # noqa: E501
5052
'python_venv': Language(name='python_venv', ENVIRONMENT_DIR=python_venv.ENVIRONMENT_DIR, get_default_version=python_venv.get_default_version, healthy=python_venv.healthy, install_environment=python_venv.install_environment, run_hook=python_venv.run_hook), # noqa: E501

pre_commit/languages/perl.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import contextlib
2+
import os
3+
from typing import Generator
4+
from typing import Sequence
5+
from typing import Tuple
6+
7+
from pre_commit.envcontext import envcontext
8+
from pre_commit.envcontext import PatchesT
9+
from pre_commit.envcontext import Var
10+
from pre_commit.hook import Hook
11+
from pre_commit.languages import helpers
12+
from pre_commit.prefix import Prefix
13+
from pre_commit.util import clean_path_on_failure
14+
15+
ENVIRONMENT_DIR = 'perl_env'
16+
get_default_version = helpers.basic_get_default_version
17+
healthy = helpers.basic_healthy
18+
19+
20+
def _envdir(prefix: Prefix, version: str) -> str:
21+
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
22+
return prefix.path(directory)
23+
24+
25+
def get_env_patch(venv: str) -> PatchesT:
26+
return (
27+
('PATH', (os.path.join(venv, 'bin'), os.pathsep, Var('PATH'))),
28+
('PERL5LIB', os.path.join(venv, 'lib', 'perl5')),
29+
('PERL_MB_OPT', f'--install_base {venv}'),
30+
(
31+
'PERL_MM_OPT', (
32+
f'INSTALL_BASE={venv}'
33+
' INSTALLSITEMAN1DIR=none INSTALLSITEMAN3DIR=none'
34+
),
35+
),
36+
)
37+
38+
39+
@contextlib.contextmanager
40+
def in_env(
41+
prefix: Prefix,
42+
language_version: str,
43+
) -> Generator[None, None, None]:
44+
with envcontext(get_env_patch(_envdir(prefix, language_version))):
45+
yield
46+
47+
48+
def install_environment(
49+
prefix: Prefix, version: str, additional_dependencies: Sequence[str],
50+
) -> None:
51+
helpers.assert_version_default('perl', version)
52+
53+
with clean_path_on_failure(_envdir(prefix, version)):
54+
with in_env(prefix, version):
55+
helpers.run_setup_cmd(
56+
prefix, ('cpan', '-T', '.', *additional_dependencies),
57+
)
58+
59+
60+
def run_hook(
61+
hook: 'Hook',
62+
file_args: Sequence[str],
63+
color: bool,
64+
) -> Tuple[int, bytes]:
65+
with in_env(hook.prefix, hook.language_version):
66+
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)

0 commit comments

Comments
 (0)