mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-14 13:00:10 -06:00
91 lines
2.3 KiB
Python
91 lines
2.3 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import multiprocessing
|
|
import os
|
|
import random
|
|
import shlex
|
|
|
|
import six
|
|
|
|
import pre_commit.constants as C
|
|
from pre_commit.util import cmd_output_b
|
|
from pre_commit.xargs import xargs
|
|
|
|
FIXED_RANDOM_SEED = 1542676186
|
|
|
|
|
|
def run_setup_cmd(prefix, cmd):
|
|
cmd_output_b(*cmd, cwd=prefix.prefix_dir)
|
|
|
|
|
|
def environment_dir(ENVIRONMENT_DIR, language_version):
|
|
if ENVIRONMENT_DIR is None:
|
|
return None
|
|
else:
|
|
return '{}-{}'.format(ENVIRONMENT_DIR, language_version)
|
|
|
|
|
|
def to_cmd(hook):
|
|
return tuple(shlex.split(hook.entry)) + tuple(hook.args)
|
|
|
|
|
|
def assert_version_default(binary, version):
|
|
if version != C.DEFAULT:
|
|
raise AssertionError(
|
|
'For now, pre-commit requires system-installed {}'.format(binary),
|
|
)
|
|
|
|
|
|
def assert_no_additional_deps(lang, additional_deps):
|
|
if additional_deps:
|
|
raise AssertionError(
|
|
'For now, pre-commit does not support '
|
|
'additional_dependencies for {}'.format(lang),
|
|
)
|
|
|
|
|
|
def basic_get_default_version():
|
|
return C.DEFAULT
|
|
|
|
|
|
def basic_healthy(prefix, language_version):
|
|
return True
|
|
|
|
|
|
def no_install(prefix, version, additional_dependencies):
|
|
raise AssertionError('This type is not installable')
|
|
|
|
|
|
def target_concurrency(hook):
|
|
if hook.require_serial or 'PRE_COMMIT_NO_CONCURRENCY' in os.environ:
|
|
return 1
|
|
else:
|
|
# Travis appears to have a bunch of CPUs, but we can't use them all.
|
|
if 'TRAVIS' in os.environ:
|
|
return 2
|
|
else:
|
|
try:
|
|
return multiprocessing.cpu_count()
|
|
except NotImplementedError:
|
|
return 1
|
|
|
|
|
|
def _shuffled(seq):
|
|
"""Deterministically shuffle identically under both py2 + py3."""
|
|
fixed_random = random.Random()
|
|
if six.PY2: # pragma: no cover (py2)
|
|
fixed_random.seed(FIXED_RANDOM_SEED)
|
|
else: # pragma: no cover (py3)
|
|
fixed_random.seed(FIXED_RANDOM_SEED, version=1)
|
|
|
|
seq = list(seq)
|
|
random.shuffle(seq, random=fixed_random.random)
|
|
return seq
|
|
|
|
|
|
def run_xargs(hook, cmd, file_args):
|
|
# Shuffle the files so that they more evenly fill out the xargs partitions,
|
|
# but do it deterministically in case a hook cares about ordering.
|
|
file_args = _shuffled(file_args)
|
|
return xargs(cmd, file_args, target_concurrency=target_concurrency(hook))
|