11from __future__ import unicode_literals
22
33import contextlib
4+ import os
45import sys
56
7+ from pre_commit .envcontext import envcontext
8+ from pre_commit .envcontext import Var
69from pre_commit .languages import helpers
710from pre_commit .util import clean_path_on_failure
8- from pre_commit .util import shell_escape
11+ from pre_commit .xargs import xargs
912
1013
1114ENVIRONMENT_DIR = 'node_env'
1215
1316
14- class NodeEnv (helpers .Environment ):
15- @property
16- def env_prefix (self ):
17- return ". '{{prefix}}{0}/bin/activate' &&" .format (
18- helpers .environment_dir (ENVIRONMENT_DIR , self .language_version ),
19- )
17+ def get_env_patch (venv ):
18+ return (
19+ ('NODE_VIRTUAL_ENV' , venv ),
20+ ('NPM_CONFIG_PREFIX' , venv ),
21+ ('npm_config_prefix' , venv ),
22+ ('NODE_PATH' , os .path .join (venv , 'lib' , 'node_modules' )),
23+ ('PATH' , (os .path .join (venv , 'bin' ), os .pathsep , Var ('PATH' ))),
24+ )
2025
2126
2227@contextlib .contextmanager
2328def in_env (repo_cmd_runner , language_version ):
24- yield NodeEnv (repo_cmd_runner , language_version )
29+ envdir = os .path .join (
30+ repo_cmd_runner .prefix_dir ,
31+ helpers .environment_dir (ENVIRONMENT_DIR , language_version ),
32+ )
33+ with envcontext (get_env_patch (envdir )):
34+ yield
2535
2636
2737def install_environment (
2838 repo_cmd_runner ,
2939 version = 'default' ,
30- additional_dependencies = None ,
40+ additional_dependencies = () ,
3141):
42+ additional_dependencies = tuple (additional_dependencies )
3243 assert repo_cmd_runner .exists ('package.json' )
3344 directory = helpers .environment_dir (ENVIRONMENT_DIR , version )
3445
@@ -44,18 +55,13 @@ def install_environment(
4455
4556 repo_cmd_runner .run (cmd )
4657
47- with in_env (repo_cmd_runner , version ) as node_env :
48- node_env .run ("cd '{prefix}' && npm install -g" , encoding = None )
49- if additional_dependencies :
50- node_env .run (
51- "cd '{prefix}' && npm install -g " +
52- ' ' .join (
53- shell_escape (dep ) for dep in additional_dependencies
54- ),
55- encoding = None ,
56- )
58+ with in_env (repo_cmd_runner , version ):
59+ helpers .run_setup_cmd (
60+ repo_cmd_runner ,
61+ ('npm' , 'install' , '-g' , '.' ) + additional_dependencies ,
62+ )
5763
5864
5965def run_hook (repo_cmd_runner , hook , file_args ):
60- with in_env (repo_cmd_runner , hook ['language_version' ]) as env :
61- return helpers . run_hook ( env , hook , file_args )
66+ with in_env (repo_cmd_runner , hook ['language_version' ]):
67+ return xargs (( hook [ 'entry' ],) + tuple ( hook [ 'args' ]) , file_args )
0 commit comments