55import os
66import sys
77
8+ from pre_commit .envcontext import envcontext
9+ from pre_commit .envcontext import UNSET
10+ from pre_commit .envcontext import Var
811from pre_commit .languages import helpers
912from pre_commit .util import clean_path_on_failure
10- from pre_commit .util import shell_escape
1113
1214
1315ENVIRONMENT_DIR = 'py_env'
1416
1517
1618def bin_dir (venv ):
1719 """On windows there's a different directory for the virtualenv"""
18- if os .name == 'nt' : # pragma: no cover (windows)
19- return os .path .join (venv , 'Scripts' )
20- else :
21- return os .path .join (venv , 'bin' )
22-
23-
24- class PythonEnv (helpers .Environment ):
25- @property
26- def env_prefix (self ):
27- return ". '{{prefix}}{0}{1}activate' &&" .format (
28- bin_dir (
29- helpers .environment_dir (ENVIRONMENT_DIR , self .language_version )
30- ),
31- os .sep ,
32- )
20+ bin_part = 'Scripts' if os .name == 'nt' else 'bin'
21+ return os .path .join (venv , bin_part )
22+
23+
24+ def get_env_patch (venv ):
25+ return (
26+ ('PYTHONHOME' , UNSET ),
27+ ('VIRTUAL_ENV' , venv ),
28+ ('PATH' , (bin_dir (venv ), os .pathsep , Var ('PATH' ))),
29+ )
3330
3431
3532@contextlib .contextmanager
3633def in_env (repo_cmd_runner , language_version ):
37- yield PythonEnv (repo_cmd_runner , language_version )
34+ envdir = os .path .join (
35+ repo_cmd_runner .prefix_dir ,
36+ helpers .environment_dir (ENVIRONMENT_DIR , language_version ),
37+ )
38+ with envcontext (get_env_patch (envdir )):
39+ yield
3840
3941
4042def norm_version (version ):
@@ -55,9 +57,9 @@ def norm_version(version):
5557def install_environment (
5658 repo_cmd_runner ,
5759 version = 'default' ,
58- additional_dependencies = None ,
60+ additional_dependencies = () ,
5961):
60- assert repo_cmd_runner . exists ( 'setup.py' )
62+ additional_dependencies = tuple ( additional_dependencies )
6163 directory = helpers .environment_dir (ENVIRONMENT_DIR , version )
6264
6365 # Install a virtualenv
@@ -69,18 +71,15 @@ def install_environment(
6971 if version != 'default' :
7072 venv_cmd .extend (['-p' , norm_version (version )])
7173 repo_cmd_runner .run (venv_cmd )
72- with in_env (repo_cmd_runner , version ) as env :
73- env .run ("cd '{prefix}' && pip install ." , encoding = None )
74- if additional_dependencies :
75- env .run (
76- "cd '{prefix}' && pip install " +
77- ' ' .join (
78- shell_escape (dep ) for dep in additional_dependencies
79- ),
80- encoding = None ,
81- )
74+ with in_env (repo_cmd_runner , version ):
75+ helpers .run_setup_cmd (
76+ repo_cmd_runner ,
77+ ('pip' , 'install' , '.' ) + additional_dependencies ,
78+ )
8279
8380
8481def run_hook (repo_cmd_runner , hook , file_args ):
85- with in_env (repo_cmd_runner , hook ['language_version' ]) as env :
86- return helpers .run_hook (env , hook , file_args )
82+ with in_env (repo_cmd_runner , hook ['language_version' ]):
83+ return helpers .run_hook (
84+ (hook ['entry' ],) + tuple (hook ['args' ]), file_args ,
85+ )
0 commit comments