Local repositories clone a blank repo

This commit is contained in:
Anthony Sottile
2017-02-15 12:47:13 -08:00
parent e704edb5e2
commit f000241dcb
15 changed files with 156 additions and 121 deletions

View File

@@ -96,40 +96,34 @@ def _install_all(venvs, repo_url):
class Repository(object):
def __init__(self, repo_config, repo_path_getter):
def __init__(self, repo_config, store):
self.repo_config = repo_config
self.repo_path_getter = repo_path_getter
self.store = store
self.__installed = False
@classmethod
def create(cls, config, store):
if is_local_hooks(config):
return LocalRepository(config)
return LocalRepository(config, store)
else:
repo_path_getter = store.get_repo_path_getter(
config['repo'], config['sha']
)
return cls(config, repo_path_getter)
return cls(config, store)
@cached_property
def _repo_path(self):
return self.store.clone(
self.repo_config['repo'], self.repo_config['sha'],
)
@cached_property
def _cmd_runner(self):
return PrefixedCommandRunner(self.repo_path_getter.repo_path)
return PrefixedCommandRunner(self._repo_path)
@cached_property
def _venvs(self):
deps_dict = defaultdict(_UniqueList)
for _, hook in self.hooks:
deps_dict[(hook['language'], hook['language_version'])].update(
hook.get('additional_dependencies', []),
)
ret = []
for (language, version), deps in deps_dict.items():
ret.append((self._cmd_runner, language, version, deps))
return tuple(ret)
def _cmd_runner_from_deps(self, language_name, deps):
return self._cmd_runner
@cached_property
def manifest(self):
return Manifest(self.repo_path_getter, self.repo_config['repo'])
return Manifest(self._repo_path, self.repo_config['repo'])
@cached_property
def hooks(self):
@@ -160,6 +154,18 @@ class Repository(object):
for hook in self.repo_config['hooks']
)
@cached_property
def _venvs(self):
deps_dict = defaultdict(_UniqueList)
for _, hook in self.hooks:
deps_dict[(hook['language'], hook['language_version'])].update(
hook.get('additional_dependencies', []),
)
ret = []
for (language, version), deps in deps_dict.items():
ret.append((self._cmd_runner, language, version, deps))
return tuple(ret)
def require_installed(self):
if not self.__installed:
_install_all(self._venvs, self.repo_config['repo'])
@@ -168,19 +174,30 @@ class Repository(object):
def run_hook(self, hook, file_args):
"""Run a hook.
Args:
hook - Hook dictionary
file_args - List of files to run
:param dict hook:
:param tuple file_args: all the files to run the hook on
"""
self.require_installed()
return languages[hook['language']].run_hook(
self._cmd_runner, hook, file_args,
)
language_name = hook['language']
deps = hook.get('additional_dependencies', [])
cmd_runner = self._cmd_runner_from_deps(language_name, deps)
return languages[language_name].run_hook(cmd_runner, hook, file_args)
class LocalRepository(Repository):
def __init__(self, repo_config):
super(LocalRepository, self).__init__(repo_config, None)
def _cmd_runner_from_deps(self, language_name, deps):
"""local repositories have a cmd runner per hook"""
language = languages[language_name]
# pcre / script / system do not have environments so they work out
# of the current directory
if language.ENVIRONMENT_DIR is None:
return PrefixedCommandRunner(git.get_root())
else:
return PrefixedCommandRunner(self.store.make_local(deps))
@cached_property
def manifest(self):
raise NotImplementedError
@cached_property
def hooks(self):
@@ -190,12 +207,17 @@ class LocalRepository(Repository):
)
@cached_property
def cmd_runner(self):
return PrefixedCommandRunner(git.get_root())
@cached_property
def manifest(self):
raise NotImplementedError
def _venvs(self):
ret = []
for _, hook in self.hooks:
language = hook['language']
version = hook['language_version']
deps = hook.get('additional_dependencies', [])
ret.append((
self._cmd_runner_from_deps(language, deps),
language, version, deps,
))
return tuple(ret)
class _UniqueList(list):