mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-14 21:10:27 -06:00
Use a more intelligent default language version
This commit is contained in:
@@ -10,16 +10,18 @@ from pre_commit.languages import script
|
||||
from pre_commit.languages import swift
|
||||
from pre_commit.languages import system
|
||||
|
||||
# A language implements the following constant and two functions in its module:
|
||||
# A language implements the following constant and functions in its module:
|
||||
#
|
||||
# # Use None for no environment
|
||||
# ENVIRONMENT_DIR = 'foo_env'
|
||||
#
|
||||
# def install_environment(
|
||||
# repo_cmd_runner,
|
||||
# version='default',
|
||||
# additional_dependencies=(),
|
||||
# ):
|
||||
# def get_default_version():
|
||||
# """Return a value to replace the 'default' value for language_version.
|
||||
#
|
||||
# return 'default' if there is no better option.
|
||||
# """
|
||||
#
|
||||
# def install_environment(repo_cmd_runner, version, additional_dependencies):
|
||||
# """Installs a repository in the given repository. Note that the current
|
||||
# working directory will already be inside the repository.
|
||||
#
|
||||
|
||||
@@ -14,6 +14,7 @@ from pre_commit.xargs import xargs
|
||||
|
||||
ENVIRONMENT_DIR = 'docker'
|
||||
PRE_COMMIT_LABEL = 'PRE_COMMIT'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def md5(s): # pragma: windows no cover
|
||||
@@ -55,9 +56,7 @@ def build_docker_image(repo_cmd_runner, **kwargs): # pragma: windows no cover
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
repo_cmd_runner, version, additional_dependencies,
|
||||
): # pragma: windows no cover
|
||||
assert repo_cmd_runner.exists('Dockerfile'), (
|
||||
'No Dockerfile was found in the hook repository'
|
||||
|
||||
@@ -14,6 +14,7 @@ from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = 'golangenv'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def get_env_patch(venv):
|
||||
@@ -44,11 +45,7 @@ def guess_go_dir(remote_url):
|
||||
return 'unknown_src_dir'
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
):
|
||||
def install_environment(repo_cmd_runner, version, additional_dependencies):
|
||||
helpers.assert_version_default('golang', version)
|
||||
directory = repo_cmd_runner.path(
|
||||
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
|
||||
|
||||
@@ -33,3 +33,7 @@ def assert_no_additional_deps(lang, additional_deps):
|
||||
'For now, pre-commit does not support '
|
||||
'additional_dependencies for {}'.format(lang),
|
||||
)
|
||||
|
||||
|
||||
def basic_get_default_version():
|
||||
return 'default'
|
||||
|
||||
@@ -12,6 +12,7 @@ from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = 'node_env'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def get_env_patch(venv): # pragma: windows no cover
|
||||
@@ -34,9 +35,7 @@ def in_env(repo_cmd_runner, language_version): # pragma: windows no cover
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
repo_cmd_runner, version, additional_dependencies,
|
||||
): # pragma: windows no cover
|
||||
additional_dependencies = tuple(additional_dependencies)
|
||||
assert repo_cmd_runner.exists('package.json')
|
||||
|
||||
@@ -2,18 +2,16 @@ from __future__ import unicode_literals
|
||||
|
||||
import sys
|
||||
|
||||
from pre_commit.languages import helpers
|
||||
from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = None
|
||||
GREP = 'ggrep' if sys.platform == 'darwin' else 'grep'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
):
|
||||
def install_environment(repo_cmd_runner, version, additional_dependencies):
|
||||
"""Installation for pcre type is a noop."""
|
||||
raise AssertionError('Cannot install pcre repo.')
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import contextlib
|
||||
import distutils.spawn
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -9,11 +8,13 @@ from pre_commit.envcontext import envcontext
|
||||
from pre_commit.envcontext import UNSET
|
||||
from pre_commit.envcontext import Var
|
||||
from pre_commit.languages import helpers
|
||||
from pre_commit.parse_shebang import find_executable
|
||||
from pre_commit.util import clean_path_on_failure
|
||||
from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = 'py_env'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def bin_dir(venv):
|
||||
@@ -39,10 +40,53 @@ def in_env(repo_cmd_runner, language_version):
|
||||
yield
|
||||
|
||||
|
||||
def _get_default_version(): # pragma: no cover (platform dependent)
|
||||
def _norm(path):
|
||||
_, exe = os.path.split(path.lower())
|
||||
exe, _, _ = exe.partition('.exe')
|
||||
if find_executable(exe) and exe not in {'python', 'pythonw'}:
|
||||
return exe
|
||||
|
||||
# First attempt from `sys.executable` (or the realpath)
|
||||
# On linux, I see these common sys.executables:
|
||||
#
|
||||
# system `python`: /usr/bin/python -> python2.7
|
||||
# system `python2`: /usr/bin/python2 -> python2.7
|
||||
# virtualenv v: v/bin/python (will not return from this loop)
|
||||
# virtualenv v -ppython2: v/bin/python -> python2
|
||||
# virtualenv v -ppython2.7: v/bin/python -> python2.7
|
||||
# virtualenv v -ppypy: v/bin/python -> v/bin/pypy
|
||||
for path in {sys.executable, os.path.realpath(sys.executable)}:
|
||||
exe = _norm(path)
|
||||
if exe:
|
||||
return exe
|
||||
|
||||
# Next try the `pythonX.X` executable
|
||||
exe = 'python{}.{}'.format(*sys.version_info)
|
||||
if find_executable(exe):
|
||||
return exe
|
||||
|
||||
# Give a best-effort try for windows
|
||||
if os.path.exists(r'C:\{}\python.exe'.format(exe.replace('.', ''))):
|
||||
return exe
|
||||
|
||||
# We tried!
|
||||
return 'default'
|
||||
|
||||
|
||||
def get_default_version():
|
||||
# TODO: when dropping python2, use `functools.lru_cache(maxsize=1)`
|
||||
try:
|
||||
return get_default_version.cached_version
|
||||
except AttributeError:
|
||||
get_default_version.cached_version = _get_default_version()
|
||||
return get_default_version()
|
||||
|
||||
|
||||
def norm_version(version):
|
||||
if os.name == 'nt': # pragma: no cover (windows)
|
||||
# Try looking up by name
|
||||
if distutils.spawn.find_executable(version):
|
||||
if find_executable(version) and find_executable(version) != version:
|
||||
return version
|
||||
|
||||
# If it is in the form pythonx.x search in the default
|
||||
@@ -54,11 +98,7 @@ def norm_version(version):
|
||||
return os.path.expanduser(version)
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
):
|
||||
def install_environment(repo_cmd_runner, version, additional_dependencies):
|
||||
additional_dependencies = tuple(additional_dependencies)
|
||||
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = 'rbenv'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def get_env_patch(venv, language_version): # pragma: windows no cover
|
||||
@@ -97,9 +98,7 @@ def _install_ruby(runner, version): # pragma: windows no cover
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
repo_cmd_runner, version, additional_dependencies,
|
||||
): # pragma: windows no cover
|
||||
additional_dependencies = tuple(additional_dependencies)
|
||||
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
|
||||
|
||||
@@ -5,13 +5,10 @@ from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = None
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
):
|
||||
def install_environment(repo_cmd_runner, version, additional_dependencies):
|
||||
"""Installation for script type is a noop."""
|
||||
raise AssertionError('Cannot install script repo.')
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ from pre_commit.util import clean_path_on_failure
|
||||
from pre_commit.xargs import xargs
|
||||
|
||||
ENVIRONMENT_DIR = 'swift_env'
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
BUILD_DIR = '.build'
|
||||
BUILD_CONFIG = 'release'
|
||||
|
||||
@@ -29,9 +30,7 @@ def in_env(repo_cmd_runner): # pragma: windows no cover
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
repo_cmd_runner, version, additional_dependencies,
|
||||
): # pragma: windows no cover
|
||||
helpers.assert_version_default('swift', version)
|
||||
helpers.assert_no_additional_deps('swift', additional_dependencies)
|
||||
|
||||
@@ -5,13 +5,10 @@ from pre_commit.xargs import xargs
|
||||
|
||||
|
||||
ENVIRONMENT_DIR = None
|
||||
get_default_version = helpers.basic_get_default_version
|
||||
|
||||
|
||||
def install_environment(
|
||||
repo_cmd_runner,
|
||||
version='default',
|
||||
additional_dependencies=(),
|
||||
):
|
||||
def install_environment(repo_cmd_runner, version, additional_dependencies):
|
||||
"""Installation for system type is a noop."""
|
||||
raise AssertionError('Cannot install system repo.')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user