mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-24 17:59:23 -06:00
Local repositories clone a blank repo
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user