@@ -96,40 +96,34 @@ def _install_all(venvs, repo_url):
9696
9797
9898class Repository (object ):
99- def __init__ (self , repo_config , repo_path_getter ):
99+ def __init__ (self , repo_config , store ):
100100 self .repo_config = repo_config
101- self .repo_path_getter = repo_path_getter
101+ self .store = store
102102 self .__installed = False
103103
104104 @classmethod
105105 def create (cls , config , store ):
106106 if is_local_hooks (config ):
107- return LocalRepository (config )
107+ return LocalRepository (config , store )
108108 else :
109- repo_path_getter = store .get_repo_path_getter (
110- config ['repo' ], config ['sha' ]
111- )
112- return cls (config , repo_path_getter )
109+ return cls (config , store )
113110
114111 @cached_property
115- def _cmd_runner (self ):
116- return PrefixedCommandRunner (self .repo_path_getter .repo_path )
112+ def _repo_path (self ):
113+ return self .store .clone (
114+ self .repo_config ['repo' ], self .repo_config ['sha' ],
115+ )
117116
118117 @cached_property
119- def _venvs (self ):
120- deps_dict = defaultdict (_UniqueList )
121- for _ , hook in self .hooks :
122- deps_dict [(hook ['language' ], hook ['language_version' ])].update (
123- hook .get ('additional_dependencies' , []),
124- )
125- ret = []
126- for (language , version ), deps in deps_dict .items ():
127- ret .append ((self ._cmd_runner , language , version , deps ))
128- return tuple (ret )
118+ def _cmd_runner (self ):
119+ return PrefixedCommandRunner (self ._repo_path )
120+
121+ def _cmd_runner_from_deps (self , language_name , deps ):
122+ return self ._cmd_runner
129123
130124 @cached_property
131125 def manifest (self ):
132- return Manifest (self .repo_path_getter , self .repo_config ['repo' ])
126+ return Manifest (self ._repo_path , self .repo_config ['repo' ])
133127
134128 @cached_property
135129 def hooks (self ):
@@ -160,6 +154,18 @@ def hooks(self):
160154 for hook in self .repo_config ['hooks' ]
161155 )
162156
157+ @cached_property
158+ def _venvs (self ):
159+ deps_dict = defaultdict (_UniqueList )
160+ for _ , hook in self .hooks :
161+ deps_dict [(hook ['language' ], hook ['language_version' ])].update (
162+ hook .get ('additional_dependencies' , []),
163+ )
164+ ret = []
165+ for (language , version ), deps in deps_dict .items ():
166+ ret .append ((self ._cmd_runner , language , version , deps ))
167+ return tuple (ret )
168+
163169 def require_installed (self ):
164170 if not self .__installed :
165171 _install_all (self ._venvs , self .repo_config ['repo' ])
@@ -168,19 +174,30 @@ def require_installed(self):
168174 def run_hook (self , hook , file_args ):
169175 """Run a hook.
170176
171- Args:
172- hook - Hook dictionary
173- file_args - List of files to run
177+ :param dict hook:
178+ :param tuple file_args: all the files to run the hook on
174179 """
175180 self .require_installed ()
176- return languages [hook ['language' ]].run_hook (
177- self ._cmd_runner , hook , file_args ,
178- )
181+ language_name = hook ['language' ]
182+ deps = hook .get ('additional_dependencies' , [])
183+ cmd_runner = self ._cmd_runner_from_deps (language_name , deps )
184+ return languages [language_name ].run_hook (cmd_runner , hook , file_args )
179185
180186
181187class LocalRepository (Repository ):
182- def __init__ (self , repo_config ):
183- super (LocalRepository , self ).__init__ (repo_config , None )
188+ def _cmd_runner_from_deps (self , language_name , deps ):
189+ """local repositories have a cmd runner per hook"""
190+ language = languages [language_name ]
191+ # pcre / script / system do not have environments so they work out
192+ # of the current directory
193+ if language .ENVIRONMENT_DIR is None :
194+ return PrefixedCommandRunner (git .get_root ())
195+ else :
196+ return PrefixedCommandRunner (self .store .make_local (deps ))
197+
198+ @cached_property
199+ def manifest (self ):
200+ raise NotImplementedError
184201
185202 @cached_property
186203 def hooks (self ):
@@ -190,12 +207,17 @@ def hooks(self):
190207 )
191208
192209 @cached_property
193- def cmd_runner (self ):
194- return PrefixedCommandRunner (git .get_root ())
195-
196- @cached_property
197- def manifest (self ):
198- raise NotImplementedError
210+ def _venvs (self ):
211+ ret = []
212+ for _ , hook in self .hooks :
213+ language = hook ['language' ]
214+ version = hook ['language_version' ]
215+ deps = hook .get ('additional_dependencies' , [])
216+ ret .append ((
217+ self ._cmd_runner_from_deps (language , deps ),
218+ language , version , deps ,
219+ ))
220+ return tuple (ret )
199221
200222
201223class _UniqueList (list ):
0 commit comments