Skip to content

Commit

Permalink
Merge pull request #1349 from pre-commit/covdefaults
Browse files Browse the repository at this point in the history
Use covdefaults to handle coveragerc
  • Loading branch information
asottile committed Feb 29, 2020
2 parents 4a3b10f + 67c1beb commit 0a8ba31
Show file tree
Hide file tree
Showing 19 changed files with 42 additions and 81 deletions.
37 changes: 0 additions & 37 deletions .coveragerc

This file was deleted.

3 changes: 0 additions & 3 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ jobs:
parameters:
toxenvs: [py37]
os: windows
additional_variables:
COVERAGE_IGNORE_WINDOWS: '# pragma: windows no cover'
TOX_TESTENV_PASSENV: COVERAGE_IGNORE_WINDOWS
pre_test:
- powershell: Write-Host "##vso[task.prependpath]$env:CONDA\Scripts"
displayName: Add conda to PATH
Expand Down
2 changes: 1 addition & 1 deletion pre_commit/color.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def bool_errcheck(result, func, args):
terminal_supports_color = False
else:
terminal_supports_color = True
else: # pragma: windows no cover
else: # pragma: win32 no cover
terminal_supports_color = True

RED = '\033[41m'
Expand Down
2 changes: 1 addition & 1 deletion pre_commit/commands/install_uninstall.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def _hook_paths(


def is_our_script(filename: str) -> bool:
if not os.path.exists(filename): # pragma: windows no cover (symlink)
if not os.path.exists(filename): # pragma: win32 no cover (symlink)
return False
with open(filename) as f:
contents = f.read()
Expand Down
2 changes: 1 addition & 1 deletion pre_commit/file_lock.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def _locked(
# before closing a file or exiting the program."
# TODO: https://github.com/python/typeshed/pull/3607
msvcrt.locking(fileno, msvcrt.LK_UNLCK, _region) # type: ignore
else: # pragma: windows no cover
else: # pragma: win32 no cover
import fcntl

@contextlib.contextmanager
Expand Down
18 changes: 9 additions & 9 deletions pre_commit/languages/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
healthy = helpers.basic_healthy


def md5(s: str) -> str: # pragma: windows no cover
def md5(s: str) -> str: # pragma: win32 no cover
return hashlib.md5(s.encode()).hexdigest()


def docker_tag(prefix: Prefix) -> str: # pragma: windows no cover
def docker_tag(prefix: Prefix) -> str: # pragma: win32 no cover
md5sum = md5(os.path.basename(prefix.prefix_dir)).lower()
return f'pre-commit-{md5sum}'


def docker_is_running() -> bool: # pragma: windows no cover
def docker_is_running() -> bool: # pragma: win32 no cover
try:
cmd_output_b('docker', 'ps')
except CalledProcessError:
Expand All @@ -35,7 +35,7 @@ def docker_is_running() -> bool: # pragma: windows no cover
return True


def assert_docker_available() -> None: # pragma: windows no cover
def assert_docker_available() -> None: # pragma: win32 no cover
assert docker_is_running(), (
'Docker is either not running or not configured in this environment'
)
Expand All @@ -45,7 +45,7 @@ def build_docker_image(
prefix: Prefix,
*,
pull: bool,
) -> None: # pragma: windows no cover
) -> None: # pragma: win32 no cover
cmd: Tuple[str, ...] = (
'docker', 'build',
'--tag', docker_tag(prefix),
Expand All @@ -60,7 +60,7 @@ def build_docker_image(

def install_environment(
prefix: Prefix, version: str, additional_dependencies: Sequence[str],
) -> None: # pragma: windows no cover
) -> None: # pragma: win32 no cover
helpers.assert_version_default('docker', version)
helpers.assert_no_additional_deps('docker', additional_dependencies)
assert_docker_available()
Expand All @@ -76,14 +76,14 @@ def install_environment(
os.mkdir(directory)


def get_docker_user() -> str: # pragma: windows no cover
def get_docker_user() -> str: # pragma: win32 no cover
try:
return f'{os.getuid()}:{os.getgid()}'
except AttributeError:
return '1000:1000'


def docker_cmd() -> Tuple[str, ...]: # pragma: windows no cover
def docker_cmd() -> Tuple[str, ...]: # pragma: win32 no cover
return (
'docker', 'run',
'--rm',
Expand All @@ -100,7 +100,7 @@ def run_hook(
hook: Hook,
file_args: Sequence[str],
color: bool,
) -> Tuple[int, bytes]: # pragma: windows no cover
) -> Tuple[int, bytes]: # pragma: win32 no cover
assert_docker_available()
# Rebuild the docker image in case it has gone missing, as many people do
# automated cleanup of docker images.
Expand Down
2 changes: 1 addition & 1 deletion pre_commit/languages/docker_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def run_hook(
hook: Hook,
file_args: Sequence[str],
color: bool,
) -> Tuple[int, bytes]: # pragma: windows no cover
) -> Tuple[int, bytes]: # pragma: win32 no cover
assert_docker_available()
cmd = docker_cmd() + hook.cmd
return helpers.run_xargs(hook, cmd, file_args, color=color)
2 changes: 1 addition & 1 deletion pre_commit/languages/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def get_env_patch(venv: str) -> PatchesT:
elif sys.platform == 'win32': # pragma: no cover
install_prefix = bin_dir(venv)
lib_dir = 'Scripts'
else: # pragma: windows no cover
else: # pragma: win32 no cover
install_prefix = venv
lib_dir = 'lib'
return (
Expand Down
12 changes: 6 additions & 6 deletions pre_commit/languages/ruby.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
def get_env_patch(
venv: str,
language_version: str,
) -> PatchesT: # pragma: windows no cover
) -> PatchesT: # pragma: win32 no cover
patches: PatchesT = (
('GEM_HOME', os.path.join(venv, 'gems')),
('RBENV_ROOT', venv),
Expand All @@ -43,7 +43,7 @@ def get_env_patch(
return patches


@contextlib.contextmanager # pragma: windows no cover
@contextlib.contextmanager # pragma: win32 no cover
def in_env(
prefix: Prefix,
language_version: str,
Expand All @@ -64,7 +64,7 @@ def _extract_resource(filename: str, dest: str) -> None:
def _install_rbenv(
prefix: Prefix,
version: str = C.DEFAULT,
) -> None: # pragma: windows no cover
) -> None: # pragma: win32 no cover
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)

_extract_resource('rbenv.tar.gz', prefix.path('.'))
Expand All @@ -80,7 +80,7 @@ def _install_rbenv(
def _install_ruby(
prefix: Prefix,
version: str,
) -> None: # pragma: windows no cover
) -> None: # pragma: win32 no cover
try:
helpers.run_setup_cmd(prefix, ('rbenv', 'download', version))
except CalledProcessError: # pragma: no cover (usually find with download)
Expand All @@ -90,7 +90,7 @@ def _install_ruby(

def install_environment(
prefix: Prefix, version: str, additional_dependencies: Sequence[str],
) -> None: # pragma: windows no cover
) -> None: # pragma: win32 no cover
additional_dependencies = tuple(additional_dependencies)
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
with clean_path_on_failure(prefix.path(directory)):
Expand Down Expand Up @@ -121,6 +121,6 @@ def run_hook(
hook: Hook,
file_args: Sequence[str],
color: bool,
) -> Tuple[int, bytes]: # pragma: windows no cover
) -> Tuple[int, bytes]: # pragma: win32 no cover
with in_env(hook.prefix, hook.language_version):
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
8 changes: 4 additions & 4 deletions pre_commit/languages/swift.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@
BUILD_CONFIG = 'release'


def get_env_patch(venv: str) -> PatchesT: # pragma: windows no cover
def get_env_patch(venv: str) -> PatchesT: # pragma: win32 no cover
bin_path = os.path.join(venv, BUILD_DIR, BUILD_CONFIG)
return (('PATH', (bin_path, os.pathsep, Var('PATH'))),)


@contextlib.contextmanager # pragma: windows no cover
@contextlib.contextmanager # pragma: win32 no cover
def in_env(prefix: Prefix) -> Generator[None, None, None]:
envdir = prefix.path(
helpers.environment_dir(ENVIRONMENT_DIR, C.DEFAULT),
Expand All @@ -37,7 +37,7 @@ def in_env(prefix: Prefix) -> Generator[None, None, None]:

def install_environment(
prefix: Prefix, version: str, additional_dependencies: Sequence[str],
) -> None: # pragma: windows no cover
) -> None: # pragma: win32 no cover
helpers.assert_version_default('swift', version)
helpers.assert_no_additional_deps('swift', additional_dependencies)
directory = prefix.path(
Expand All @@ -59,6 +59,6 @@ def run_hook(
hook: Hook,
file_args: Sequence[str],
color: bool,
) -> Tuple[int, bytes]: # pragma: windows no cover
) -> Tuple[int, bytes]: # pragma: win32 no cover
with in_env(hook.prefix):
return helpers.run_xargs(hook, hook.cmd, file_args, color=color)
2 changes: 1 addition & 1 deletion pre_commit/parse_shebang.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def _error(msg: str) -> 'NoReturn':
_error('is a directory')
elif not os.path.isfile(orig):
_error('not found')
elif not os.access(orig, os.X_OK): # pragma: windows no cover
elif not os.access(orig, os.X_OK): # pragma: win32 no cover
_error('is not executable')
else:
return orig
Expand Down
2 changes: 1 addition & 1 deletion pre_commit/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ def cmd_output(*cmd: str, **kwargs: Any) -> Tuple[int, str, Optional[str]]:
return returncode, stdout, stderr


if os.name != 'nt': # pragma: windows no cover
if os.name != 'nt': # pragma: win32 no cover
from os import openpty
import termios

Expand Down
3 changes: 1 addition & 2 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
-e .

covdefaults
coverage
pytest
pytest-env
4 changes: 4 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ exclude =
[bdist_wheel]
universal = True

[coverage:run]
plugins = covdefaults
omit = pre_commit/resources/*

[mypy]
check_untyped_defs = true
disallow_any_generics = true
Expand Down
2 changes: 0 additions & 2 deletions tests/commands/install_uninstall_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from testing.util import cmd_output_mocked_pre_commit_home
from testing.util import cwd
from testing.util import git_commit
from testing.util import xfailif_windows


def test_is_not_script():
Expand Down Expand Up @@ -823,7 +822,6 @@ def test_prepare_commit_msg_legacy(
assert 'Signed off by: ' in f.read()


@xfailif_windows # pragma: windows no cover (once AP has git 2.24)
def test_pre_merge_commit_integration(tempdir_factory, store):
expected = re.compile(
r'^\[INFO\] Initializing environment for .+\n'
Expand Down
4 changes: 2 additions & 2 deletions tests/languages/python_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@

def test_norm_version_expanduser():
home = os.path.expanduser('~')
if os.name == 'nt': # pragma: no cover (nt)
if os.name == 'nt': # pragma: nt cover
path = r'~\python343'
expected_path = fr'{home}\python343'
else: # pragma: windows no cover
else: # pragma: nt no cover
path = '~/.pyenv/versions/3.4.3/bin/python'
expected_path = f'{home}/.pyenv/versions/3.4.3/bin/python'
result = python.norm_version(path)
Expand Down
2 changes: 1 addition & 1 deletion tests/parse_shebang_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ def test_normexe_does_not_exist_sep():


@pytest.mark.xfail(os.name == 'nt', reason='posix only')
def test_normexe_not_executable(tmpdir): # pragma: windows no cover
def test_normexe_not_executable(tmpdir): # pragma: win32 no cover
tmpdir.join('exe').ensure()
with tmpdir.as_cwd(), pytest.raises(OSError) as excinfo:
parse_shebang.normexe('./exe')
Expand Down
14 changes: 7 additions & 7 deletions tests/repository_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ def test_versioned_python_hook(tempdir_factory, store):
)


@skipif_cant_run_docker # pragma: windows no cover
@skipif_cant_run_docker # pragma: win32 no cover
def test_run_a_docker_hook(tempdir_factory, store):
_test_hook_repo(
tempdir_factory, store, 'docker_hooks_repo',
Expand All @@ -206,7 +206,7 @@ def test_run_a_docker_hook(tempdir_factory, store):
)


@skipif_cant_run_docker # pragma: windows no cover
@skipif_cant_run_docker # pragma: win32 no cover
def test_run_a_docker_hook_with_entry_args(tempdir_factory, store):
_test_hook_repo(
tempdir_factory, store, 'docker_hooks_repo',
Expand All @@ -215,7 +215,7 @@ def test_run_a_docker_hook_with_entry_args(tempdir_factory, store):
)


@skipif_cant_run_docker # pragma: windows no cover
@skipif_cant_run_docker # pragma: win32 no cover
def test_run_a_failing_docker_hook(tempdir_factory, store):
_test_hook_repo(
tempdir_factory, store, 'docker_hooks_repo',
Expand All @@ -226,7 +226,7 @@ def test_run_a_failing_docker_hook(tempdir_factory, store):
)


@skipif_cant_run_docker # pragma: windows no cover
@skipif_cant_run_docker # pragma: win32 no cover
@pytest.mark.parametrize('hook_id', ('echo-entrypoint', 'echo-cmd'))
def test_run_a_docker_image_hook(tempdir_factory, store, hook_id):
_test_hook_repo(
Expand Down Expand Up @@ -297,7 +297,7 @@ def test_system_hook_with_spaces(tempdir_factory, store):
)


@skipif_cant_run_swift # pragma: windows no cover
@skipif_cant_run_swift # pragma: win32 no cover
def test_swift_hook(tempdir_factory, store):
_test_hook_repo(
tempdir_factory, store, 'swift_hooks_repo',
Expand Down Expand Up @@ -514,7 +514,7 @@ def test_additional_dependencies_roll_forward(tempdir_factory, store):
assert 'mccabe' not in cmd_output('pip', 'freeze', '-l')[1]


@xfailif_windows_no_ruby # pragma: windows no cover
@xfailif_windows_no_ruby # pragma: win32 no cover
def test_additional_ruby_dependencies_installed(tempdir_factory, store):
path = make_repo(tempdir_factory, 'ruby_hooks_repo')
config = make_config_from_repo(path)
Expand Down Expand Up @@ -758,7 +758,7 @@ def local_python_config():
return {'repo': 'local', 'hooks': hooks}


@pytest.mark.xfail( # pragma: windows no cover
@pytest.mark.xfail( # pragma: win32 no cover
sys.platform == 'win32',
reason='microsoft/azure-pipelines-image-generation#989',
)
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ passenv = HOME LOCALAPPDATA RUSTUP_HOME
commands =
coverage erase
coverage run -m pytest {posargs:tests}
coverage report --fail-under 100
coverage report
pre-commit install

[testenv:pre-commit]
Expand Down

0 comments on commit 0a8ba31

Please sign in to comment.