From 7a49309035502ba5fd0b321571697e42b2f31763 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 12 Mar 2020 09:18:45 -0700 Subject: [PATCH] mark a python environment as unhealthy if python goes missing --- pre_commit/languages/python.py | 6 ++++-- tests/languages/python_test.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py index caa779489..5073a8bce 100644 --- a/pre_commit/languages/python.py +++ b/pre_commit/languages/python.py @@ -158,10 +158,12 @@ def in_env( yield def healthy(prefix: Prefix, language_version: str) -> bool: + envdir = helpers.environment_dir(_dir, language_version) + exe_name = 'python.exe' if sys.platform == 'win32' else 'python' + py_exe = prefix.path(bin_dir(envdir), exe_name) with in_env(prefix, language_version): retcode, _, _ = cmd_output_b( - 'python', '-c', - 'import ctypes, datetime, io, os, ssl, weakref', + py_exe, '-c', 'import ctypes, datetime, io, os, ssl, weakref', cwd='/', retcode=None, ) diff --git a/tests/languages/python_test.py b/tests/languages/python_test.py index 245c73a08..34c6c7fc5 100644 --- a/tests/languages/python_test.py +++ b/tests/languages/python_test.py @@ -59,3 +59,17 @@ def test_healthy_types_py_in_cwd(tmpdir): # even if a `types.py` file exists, should still be healthy tmpdir.join('types.py').ensure() assert python.healthy(prefix, C.DEFAULT) is True + + +def test_healthy_python_goes_missing(tmpdir): + with tmpdir.as_cwd(): + prefix = tmpdir.join('prefix').ensure_dir() + prefix.join('setup.py').write('import setuptools; setuptools.setup()') + prefix = Prefix(str(prefix)) + python.install_environment(prefix, C.DEFAULT, ()) + + exe_name = 'python' if sys.platform != 'win32' else 'python.exe' + py_exe = prefix.path(python.bin_dir('py_env-default'), exe_name) + os.remove(py_exe) + + assert python.healthy(prefix, C.DEFAULT) is False