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

Skip to content

Commit 60f30cd

Browse files
authored
Merge pull request #1303 from scop/perl
Perl hook support
2 parents 11c55fd + 977bbd7 commit 60f30cd

13 files changed

Lines changed: 153 additions & 2 deletions

File tree

azure-pipelines.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ jobs:
2424
pre_test:
2525
- powershell: Write-Host "##vso[task.prependpath]$env:CONDA\Scripts"
2626
displayName: Add conda to PATH
27+
- powershell: |
28+
Write-Host "##vso[task.prependpath]C:\Strawberry\perl\bin"
29+
Write-Host "##vso[task.prependpath]C:\Strawberry\perl\site\bin"
30+
Write-Host "##vso[task.prependpath]C:\Strawberry\c\bin"
31+
displayName: Add strawberry perl to PATH
2732
- template: job--python-tox.yml@asottile
2833
parameters:
2934
toxenvs: [py37]

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

pre_commit/store.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ def _git_cmd(*args: str) -> None:
184184
LOCAL_RESOURCES = (
185185
'Cargo.toml', 'main.go', 'main.rs', '.npmignore', 'package.json',
186186
'pre_commit_dummy_package.gemspec', 'setup.py', 'environment.yml',
187+
'Makefile.PL',
187188
)
188189

189190
def make_local(self, deps: Sequence[str]) -> str:

testing/gen-languages-all

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
import sys
33

44
LANGUAGES = [
5-
'conda', 'docker', 'docker_image', 'fail', 'golang', 'node', 'pygrep',
6-
'python', 'python_venv', 'ruby', 'rust', 'script', 'swift', 'system',
5+
'conda', 'docker', 'docker_image', 'fail', 'golang', 'node', 'perl',
6+
'pygrep', 'python', 'python_venv', 'ruby', 'rust', 'script', 'swift',
7+
'system',
78
]
89
FIELDS = [
910
'ENVIRONMENT_DIR', 'get_default_version', 'healthy', 'install_environment',
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/MYMETA.json
2+
/MYMETA.yml
3+
/Makefile
4+
/PreCommitHello-*.tar.*
5+
/PreCommitHello-*/
6+
/blib/
7+
/pm_to_blib
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
- id: perl-hook
2+
name: perl example hook
3+
entry: pre-commit-perl-hello
4+
language: perl
5+
files: ''
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
MANIFEST
2+
Makefile.PL
3+
bin/pre-commit-perl-hello
4+
lib/PreCommitHello.pm
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
use strict;
2+
use warnings;
3+
4+
use ExtUtils::MakeMaker;
5+
6+
WriteMakefile(
7+
NAME => "PreCommitHello",
8+
VERSION_FROM => "lib/PreCommitHello.pm",
9+
EXE_FILES => [qw(bin/pre-commit-perl-hello)],
10+
);

0 commit comments

Comments
 (0)