40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from collections.abc import Sequence
|
|
|
|
from pre_commit.lang_base import Language
|
|
from pre_commit.prefix import Prefix
|
|
|
|
|
|
def run_language(
|
|
path: os.PathLike[str],
|
|
language: Language,
|
|
exe: str,
|
|
args: Sequence[str] = (),
|
|
file_args: Sequence[str] = (),
|
|
version: str | None = None,
|
|
deps: Sequence[str] = (),
|
|
is_local: bool = False,
|
|
require_serial: bool = True,
|
|
color: bool = False,
|
|
) -> tuple[int, bytes]:
|
|
prefix = Prefix(str(path))
|
|
version = version or language.get_default_version()
|
|
|
|
if language.ENVIRONMENT_DIR is not None:
|
|
language.install_environment(prefix, version, deps)
|
|
health_error = language.health_check(prefix, version)
|
|
assert health_error is None, health_error
|
|
with language.in_env(prefix, version):
|
|
ret, out = language.run_hook(
|
|
prefix,
|
|
exe,
|
|
args,
|
|
file_args,
|
|
is_local=is_local,
|
|
require_serial=require_serial,
|
|
color=color,
|
|
)
|
|
out = out.replace(b'\r\n', b'\n')
|
|
return ret, out
|