1
0
mirror of https://github.com/fedora-python/tox-current-env.git synced 2025-05-29 15:40:06 +02:00

Only use tox_cleanup hook when it is possible

This commit is contained in:
Miro Hrončok 2019-08-01 14:46:01 +02:00
parent a645fe2175
commit cf04976cea
3 changed files with 30 additions and 12 deletions
src/tox_current_env
tests
tox.ini

@ -85,10 +85,15 @@ def unsupported_raise(config, venv):
return return
regular = not (config.option.current_env or config.option.print_deps_only) regular = not (config.option.current_env or config.option.print_deps_only)
if regular and is_current_env_link(venv): if regular and is_current_env_link(venv):
if hasattr(tox.hookspecs, "tox_cleanup"):
raise tox.exception.ConfigError( raise tox.exception.ConfigError(
"Looks like previous --current-env or --print-deps-only tox run didn't finish the cleanup. " "Looks like previous --current-env or --print-deps-only tox run didn't finish the cleanup. "
"Run tox run with --recreate (-r) or manually remove the environment in .tox." "Run tox run with --recreate (-r) or manually remove the environment in .tox."
) )
else:
raise tox.exception.ConfigError(
"Regular tox run after --current-env or --print-deps-only tox run is not supported without --recreate (-r)."
)
elif config.option.current_env and is_proper_venv(venv): elif config.option.current_env and is_proper_venv(venv):
raise tox.exception.ConfigError( raise tox.exception.ConfigError(
"--current-env after regular tox run is not supported without --recreate (-r)." "--current-env after regular tox run is not supported without --recreate (-r)."
@ -166,8 +171,10 @@ def tox_runtest(venv, redirect):
return True return True
@tox.hookimpl if hasattr(tox.hookspecs, "tox_cleanup"):
def tox_cleanup(session):
@tox.hookimpl
def tox_cleanup(session):
"""Remove the fake virtualenv not to collide with regular tox """Remove the fake virtualenv not to collide with regular tox
Collisions can happen anyway (when tox is killed forcefully before this happens) Collisions can happen anyway (when tox is killed forcefully before this happens)
Note that we don't remove real venvs, as recreating them is expensive""" Note that we don't remove real venvs, as recreating them is expensive"""

@ -6,6 +6,8 @@ import subprocess
import sys import sys
import textwrap import textwrap
from packaging import version
import pytest import pytest
@ -37,6 +39,8 @@ def is_available(python):
return True return True
TOX_VERSION = version.parse(tox("--version").stdout.split(" ")[0])
needs_py3678 = pytest.mark.skipif( needs_py3678 = pytest.mark.skipif(
not is_available("python3.6") not is_available("python3.6")
or not is_available("python3.7") or not is_available("python3.7")
@ -44,6 +48,10 @@ needs_py3678 = pytest.mark.skipif(
reason="This test needs all of python3.6, python3.7 and python3.8 to be available in $PATH", reason="This test needs all of python3.6, python3.7 and python3.8 to be available in $PATH",
) )
needs_tox38 = pytest.mark.skipif(
TOX_VERSION < version.parse("3.8"), reason="This test needs at least tox 3.8"
)
def test_native_toxenv_current_env(): def test_native_toxenv_current_env():
result = tox("-e", NATIVE_TOXENV, "--current-env") result = tox("-e", NATIVE_TOXENV, "--current-env")
@ -195,6 +203,7 @@ def test_regular_run_native_toxenv():
assert len(list(sitelib.glob(f"{pkg}-*.dist-info"))) == 1 assert len(list(sitelib.glob(f"{pkg}-*.dist-info"))) == 1
@needs_tox38
def test_regular_after_current_is_supported(): def test_regular_after_current_is_supported():
result = tox("-e", NATIVE_TOXENV, "--current-env") result = tox("-e", NATIVE_TOXENV, "--current-env")
assert result.stdout.splitlines()[0] == NATIVE_EXECUTABLE assert result.stdout.splitlines()[0] == NATIVE_EXECUTABLE
@ -214,6 +223,7 @@ def test_regular_after_killed_current_is_not_supported():
assert "--recreate" in result.stderr assert "--recreate" in result.stderr
@needs_tox38
def test_regular_after_first_deps_only_is_supported(): def test_regular_after_first_deps_only_is_supported():
result = tox("-e", NATIVE_TOXENV, "--print-deps-only") result = tox("-e", NATIVE_TOXENV, "--print-deps-only")
assert result.stdout.splitlines()[0] == "six" assert result.stdout.splitlines()[0] == "six"

@ -4,6 +4,7 @@ envlist = {py36,py37,py38}-tox{35,release,master}
[testenv] [testenv]
deps= deps=
pytest pytest
packaging
tox35: tox >=3.5,<3.6 tox35: tox >=3.5,<3.6
toxrelease: tox toxrelease: tox
toxmaster: git+https://github.com/tox-dev/tox.git@master toxmaster: git+https://github.com/tox-dev/tox.git@master