Skip to content

Commit ae34a96

Browse files
committed
make in_env part of the language api
1 parent bcf0230 commit ae34a96

File tree

23 files changed

+73
-92
lines changed

23 files changed

+73
-92
lines changed

pre_commit/commands/run.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ def _run_single_hook(
189189
filenames = ()
190190
time_before = time.time()
191191
language = languages[hook.language]
192-
retcode, out = language.run_hook(hook, filenames, use_color)
192+
with language.in_env(hook.prefix, hook.language_version):
193+
retcode, out = language.run_hook(hook, filenames, use_color)
193194
duration = round(time.time() - time_before, 2) or 0
194195
diff_after = _get_diff()
195196

pre_commit/languages/all.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from typing import ContextManager
34
from typing import Protocol
45
from typing import Sequence
56

@@ -50,6 +51,14 @@ def install_environment(
5051
) -> None:
5152
...
5253

54+
# modify the environment for hook execution
55+
def in_env(
56+
self,
57+
prefix: Prefix,
58+
version: str,
59+
) -> ContextManager[None]:
60+
...
61+
5362
# execute a hook and return the exit code and output
5463
def run_hook(
5564
self,

pre_commit/languages/conda.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,8 @@ def get_env_patch(env: str) -> PatchesT:
4040

4141

4242
@contextlib.contextmanager
43-
def in_env(
44-
prefix: Prefix,
45-
language_version: str,
46-
) -> Generator[None, None, None]:
47-
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, language_version)
43+
def in_env(prefix: Prefix, version: str) -> Generator[None, None, None]:
44+
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, version)
4845
with envcontext(get_env_patch(envdir)):
4946
yield
5047

@@ -88,5 +85,4 @@ def run_hook(
8885
# can run them without which is much quicker and produces a better
8986
# output.
9087
# cmd = ('conda', 'run', '-p', env_dir) + hook.cmd
91-
with in_env(hook.prefix, hook.language_version):
92-
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
88+
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)

pre_commit/languages/coursier.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,9 @@ def get_env_patch(target_dir: str) -> PatchesT: # pragma: win32 no cover
5959
)
6060

6161

62-
@contextlib.contextmanager
63-
def in_env(
64-
prefix: Prefix,
65-
language_version: str,
66-
) -> Generator[None, None, None]: # pragma: win32 no cover
67-
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, language_version)
62+
@contextlib.contextmanager # pragma: win32 no cover
63+
def in_env(prefix: Prefix, version: str) -> Generator[None, None, None]:
64+
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, version)
6865
with envcontext(get_env_patch(envdir)):
6966
yield
7067

@@ -74,5 +71,4 @@ def run_hook(
7471
file_args: Sequence[str],
7572
color: bool,
7673
) -> tuple[int, bytes]: # pragma: win32 no cover
77-
with in_env(hook.prefix, hook.language_version):
78-
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
74+
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)

pre_commit/languages/dart.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from typing import Generator
88
from typing import Sequence
99

10-
import pre_commit.constants as C
1110
from pre_commit.envcontext import envcontext
1211
from pre_commit.envcontext import PatchesT
1312
from pre_commit.envcontext import Var
@@ -30,8 +29,8 @@ def get_env_patch(venv: str) -> PatchesT:
3029

3130

3231
@contextlib.contextmanager
33-
def in_env(prefix: Prefix) -> Generator[None, None, None]:
34-
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, C.DEFAULT)
32+
def in_env(prefix: Prefix, version: str) -> Generator[None, None, None]:
33+
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, version)
3534
with envcontext(get_env_patch(envdir)):
3635
yield
3736

@@ -103,5 +102,4 @@ def run_hook(
103102
file_args: Sequence[str],
104103
color: bool,
105104
) -> tuple[int, bytes]:
106-
with in_env(hook.prefix):
107-
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
105+
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)

pre_commit/languages/docker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import os
66
from typing import Sequence
77

8-
import pre_commit.constants as C
98
from pre_commit.hook import Hook
109
from pre_commit.languages import helpers
1110
from pre_commit.prefix import Prefix
@@ -16,6 +15,7 @@
1615
PRE_COMMIT_LABEL = 'PRE_COMMIT'
1716
get_default_version = helpers.basic_get_default_version
1817
health_check = helpers.basic_health_check
18+
in_env = helpers.no_env # no special environment for docker
1919

2020

2121
def _is_in_docker() -> bool:
@@ -94,7 +94,7 @@ def install_environment(
9494
helpers.assert_version_default('docker', version)
9595
helpers.assert_no_additional_deps('docker', additional_dependencies)
9696

97-
directory = helpers.environment_dir(prefix, ENVIRONMENT_DIR, C.DEFAULT)
97+
directory = helpers.environment_dir(prefix, ENVIRONMENT_DIR, version)
9898

9999
# Docker doesn't really have relevant disk environment, but pre-commit
100100
# still needs to cleanup its state files on failure

pre_commit/languages/docker_image.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
get_default_version = helpers.basic_get_default_version
1111
health_check = helpers.basic_health_check
1212
install_environment = helpers.no_install
13+
in_env = helpers.no_env
1314

1415

1516
def run_hook(

pre_commit/languages/dotnet.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from typing import Generator
1010
from typing import Sequence
1111

12-
import pre_commit.constants as C
1312
from pre_commit.envcontext import envcontext
1413
from pre_commit.envcontext import PatchesT
1514
from pre_commit.envcontext import Var
@@ -31,8 +30,8 @@ def get_env_patch(venv: str) -> PatchesT:
3130

3231

3332
@contextlib.contextmanager
34-
def in_env(prefix: Prefix) -> Generator[None, None, None]:
35-
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, C.DEFAULT)
33+
def in_env(prefix: Prefix, version: str) -> Generator[None, None, None]:
34+
envdir = helpers.environment_dir(prefix, ENVIRONMENT_DIR, version)
3635
with envcontext(get_env_patch(envdir)):
3736
yield
3837

@@ -121,5 +120,4 @@ def run_hook(
121120
file_args: Sequence[str],
122121
color: bool,
123122
) -> tuple[int, bytes]:
124-
with in_env(hook.prefix):
125-
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
123+
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)

pre_commit/languages/fail.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
get_default_version = helpers.basic_get_default_version
1010
health_check = helpers.basic_health_check
1111
install_environment = helpers.no_install
12+
in_env = helpers.no_env
1213

1314

1415
def run_hook(

pre_commit/languages/golang.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,5 +164,4 @@ def run_hook(
164164
file_args: Sequence[str],
165165
color: bool,
166166
) -> tuple[int, bytes]:
167-
with in_env(hook.prefix, hook.language_version):
168-
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
167+
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)

0 commit comments

Comments
 (0)