File tree Expand file tree Collapse file tree 8 files changed +37
-9
lines changed
Expand file tree Collapse file tree 8 files changed +37
-9
lines changed Original file line number Diff line number Diff line change @@ -23,7 +23,8 @@ def in_env(repo_cmd_runner, language_version):
2323 yield NodeEnv (repo_cmd_runner , language_version )
2424
2525
26- def install_environment (repo_cmd_runner , version = 'default' ):
26+ def install_environment (repo_cmd_runner , version = 'default' ,
27+ additional_dependencies = None ):
2728 assert repo_cmd_runner .exists ('package.json' )
2829 directory = helpers .environment_dir (ENVIRONMENT_DIR , version )
2930
@@ -41,6 +42,9 @@ def install_environment(repo_cmd_runner, version='default'):
4142
4243 with in_env (repo_cmd_runner , version ) as node_env :
4344 node_env .run ("cd '{prefix}' && npm install -g" )
45+ if additional_dependencies :
46+ node_env .run ("cd '{prefix}' && npm install -g " +
47+ (' ' ).join (additional_dependencies ))
4448
4549
4650def run_hook (repo_cmd_runner , hook , file_args ):
Original file line number Diff line number Diff line change 99ENVIRONMENT_DIR = None
1010
1111
12- def install_environment (repo_cmd_runner , version = 'default' ):
12+ def install_environment (repo_cmd_runner , version = 'default' ,
13+ additional_dependencies = None ):
1314 """Installation for pcre type is a noop."""
1415 raise AssertionError ('Cannot install pcre repo.' )
1516
Original file line number Diff line number Diff line change @@ -42,7 +42,8 @@ def norm_version(version):
4242 return version
4343
4444
45- def install_environment (repo_cmd_runner , version = 'default' ):
45+ def install_environment (repo_cmd_runner , version = 'default' ,
46+ additional_dependencies = None ):
4647 assert repo_cmd_runner .exists ('setup.py' )
4748 directory = helpers .environment_dir (ENVIRONMENT_DIR , version )
4849
@@ -57,6 +58,9 @@ def install_environment(repo_cmd_runner, version='default'):
5758 repo_cmd_runner .run (venv_cmd )
5859 with in_env (repo_cmd_runner , version ) as env :
5960 env .run ("cd '{prefix}' && pip install ." )
61+ if additional_dependencies :
62+ env .run ("cd '{prefix}' && pip install -U" +
63+ (' ' ).join (additional_dependencies ))
6064
6165
6266def run_hook (repo_cmd_runner , hook , file_args ):
Original file line number Diff line number Diff line change @@ -78,7 +78,8 @@ def _install_ruby(environment, version):
7878 environment .run ('rbenv install {0}' .format (version ))
7979
8080
81- def install_environment (repo_cmd_runner , version = 'default' ):
81+ def install_environment (repo_cmd_runner , version = 'default' ,
82+ additional_dependencies = None ):
8283 directory = helpers .environment_dir (ENVIRONMENT_DIR , version )
8384 with clean_path_on_failure (repo_cmd_runner .path (directory )):
8485 # TODO: this currently will fail if there's no version specified and
@@ -91,6 +92,11 @@ def install_environment(repo_cmd_runner, version='default'):
9192 'cd {prefix} && gem build *.gemspec'
9293 ' && gem install --no-ri --no-rdoc *.gem' ,
9394 )
95+ if additional_dependencies :
96+ ruby_env .run (
97+ 'cd {prefix} && gem install --no-document ' + (' ' ).join (
98+ additional_dependencies )
99+ )
94100
95101
96102def run_hook (repo_cmd_runner , hook , file_args ):
Original file line number Diff line number Diff line change 66ENVIRONMENT_DIR = None
77
88
9- def install_environment (repo_cmd_runner , version = 'default' ):
9+ def install_environment (repo_cmd_runner , version = 'default' ,
10+ additional_dependencies = None ):
1011 """Installation for script type is a noop."""
1112 raise AssertionError ('Cannot install script repo.' )
1213
Original file line number Diff line number Diff line change 88ENVIRONMENT_DIR = None
99
1010
11- def install_environment (repo_cmd_runner , version = 'default' ):
11+ def install_environment (repo_cmd_runner , version = 'default' ,
12+ additional_dependencies = None ):
1213 """Installation for system type is a noop."""
1314 raise AssertionError ('Cannot install system repo.' )
1415
Original file line number Diff line number Diff line change 22
33import logging
44import shutil
5+ from collections import defaultdict
56
67from cached_property import cached_property
78
@@ -49,6 +50,14 @@ def languages(self):
4950 for _ , hook in self .hooks
5051 )
5152
53+ @cached_property
54+ def additional_dependencies (self ):
55+ dep_dict = defaultdict (lambda : defaultdict (set ))
56+ for _ , hook in self .hooks :
57+ dep_dict [hook ['language' ]][hook ['language_version' ]].update (
58+ hook .get ('dependencies' , []))
59+ return dep_dict
60+
5261 @cached_property
5362 def hooks (self ):
5463 # TODO: merging in manifest dicts is a smell imo
@@ -107,7 +116,9 @@ def language_is_installed(language_name, language_version):
107116 if self .cmd_runner .exists (directory ):
108117 shutil .rmtree (self .cmd_runner .path (directory ))
109118
110- language .install_environment (self .cmd_runner , language_version )
119+ language .install_environment (
120+ self .cmd_runner , language_version ,
121+ self .additional_dependencies [language_name ][language_version ])
111122 # Touch the .installed file (atomic) to indicate we've installed
112123 open (self .cmd_runner .path (directory , '.installed' ), 'w' ).close ()
113124
Original file line number Diff line number Diff line change 1111@pytest .mark .parametrize ('language' , all_languages )
1212def test_install_environment_argspec (language ):
1313 expected_argspec = inspect .ArgSpec (
14- args = ['repo_cmd_runner' , 'version' ],
14+ args = ['repo_cmd_runner' , 'version' , 'additional_dependencies' ],
1515 varargs = None ,
1616 keywords = None ,
17- defaults = ('default' ,),
17+ defaults = ('default' , None ),
1818 )
1919 argspec = inspect .getargspec (languages [language ].install_environment )
2020 assert argspec == expected_argspec
You can’t perform that action at this time.
0 commit comments