diff options
-rw-r--r-- | docs/changelog/2653.bugfix.rst | 1 | ||||
-rw-r--r-- | src/tox/session/cmd/run/common.py | 6 | ||||
-rw-r--r-- | src/tox/tox_env/runner.py | 3 | ||||
-rw-r--r-- | tests/tox_env/test_tox_env_runner.py | 27 |
4 files changed, 35 insertions, 2 deletions
diff --git a/docs/changelog/2653.bugfix.rst b/docs/changelog/2653.bugfix.rst new file mode 100644 index 00000000..5915339f --- /dev/null +++ b/docs/changelog/2653.bugfix.rst @@ -0,0 +1 @@ +Fix ``--sdistonly`` behaviour. diff --git a/src/tox/session/cmd/run/common.py b/src/tox/session/cmd/run/common.py index cc546e13..02797bfb 100644 --- a/src/tox/session/cmd/run/common.py +++ b/src/tox/session/cmd/run/common.py @@ -299,7 +299,11 @@ def _queue_and_wait( def _run(tox_env: RunToxEnv) -> ToxEnvRunResult: spinner.add(tox_env.conf.name) - return run_one(tox_env, options.parsed.no_test, suspend_display=live is False) + return run_one( + tox_env, + options.parsed.no_test or options.parsed.package_only, + suspend_display=live is False, + ) try: executor = ThreadPoolExecutor(max_workers=max_workers, thread_name_prefix="tox-driver") diff --git a/src/tox/tox_env/runner.py b/src/tox/tox_env/runner.py index fb9a95e0..2031824b 100644 --- a/src/tox/tox_env/runner.py +++ b/src/tox/tox_env/runner.py @@ -165,7 +165,8 @@ class RunToxEnv(ToxEnv, ABC): def _setup_pkg(self) -> None: self._packages = self._build_packages() - self._install(self._packages, RunToxEnv.__name__, "package") + if not self.options.package_only: + self._install(self._packages, RunToxEnv.__name__, "package") self._handle_journal_package(self.journal, self._packages) @staticmethod diff --git a/tests/tox_env/test_tox_env_runner.py b/tests/tox_env/test_tox_env_runner.py new file mode 100644 index 00000000..f1b34a90 --- /dev/null +++ b/tests/tox_env/test_tox_env_runner.py @@ -0,0 +1,27 @@ +from pathlib import Path + +from tox.pytest import ToxProjectCreator + + +def test_package_only( + tox_project: ToxProjectCreator, + demo_pkg_inline: Path, +) -> None: + ini = "[testenv]\ncommands = python -c 'print('foo')'" + proj = tox_project( + {"tox.ini": ini, "pyproject.toml": (demo_pkg_inline / "pyproject.toml").read_text()}, + base=demo_pkg_inline, + ) + execute_calls = proj.patch_execute(lambda r: 0 if "install" in r.run_id else None) + result = proj.run("r", "--sdistonly") + result.assert_success() + + expected_calls = [ + (".pkg", "_optional_hooks"), + (".pkg", "get_requires_for_build_sdist"), + (".pkg", "build_wheel"), + (".pkg", "build_sdist"), + (".pkg", "_exit"), + ] + found_calls = [(i[0][0].conf.name, i[0][3].run_id) for i in execute_calls.call_args_list] + assert found_calls == expected_calls |