Skip to content

Commit

Permalink
Merge branch 'master' into bbrown1867/1024/exit-faster-when-xfailed
Browse files Browse the repository at this point in the history
  • Loading branch information
bbrown1867 authored Mar 13, 2024
2 parents c87f6b5 + 5b83de4 commit fdf0669
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 18 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
path: dist

- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@v1.8.12
uses: pypa/gh-action-pypi-publish@v1.8.14

- name: Push tag
run: |
Expand All @@ -49,7 +49,7 @@ jobs:
git push origin v${{ github.event.inputs.version }}
- name: GitHub Release
uses: softprops/action-gh-release@v1
uses: softprops/action-gh-release@v2
with:
files: dist/*
tag_name: v${{ github.event.inputs.version }}
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ repos:
language: python
additional_dependencies: [pygments, restructuredtext_lint]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
rev: v1.9.0
hooks:
- id: mypy
files: ^(src/|testing/)
Expand Down
1 change: 1 addition & 0 deletions changelog/937.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a bug where plugin would raise an incompatibility error with ``--pdb`` despite using ``-n0``.
22 changes: 18 additions & 4 deletions src/xdist/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ def pytest_configure(config):

# Create the distributed session in case we have a valid distribution
# mode and test environments.
if config.getoption("dist") != "no" and config.getoption("tx"):
if _is_distribution_mode(config):
from xdist.dsession import DSession

session = DSession(config)
Expand All @@ -258,8 +258,19 @@ def pytest_configure(config):
config.issue_config_time_warning(warning, 2)


def _is_distribution_mode(config):
"""Return `True` if distribution mode is on, `False` otherwise.
:param config: the `pytest` `config` object
"""
return config.getoption("dist") != "no" and config.getoption("tx")


@pytest.hookimpl(tryfirst=True)
def pytest_cmdline_main(config):
if config.option.distload:
config.option.dist = "load"

usepdb = config.getoption("usepdb", False) # a core option
if config.option.numprocesses in ("auto", "logical"):
if usepdb:
Expand All @@ -276,10 +287,13 @@ def pytest_cmdline_main(config):
if config.option.maxprocesses:
numprocesses = min(numprocesses, config.option.maxprocesses)
config.option.tx = ["popen"] * numprocesses
if config.option.distload:
config.option.dist = "load"

if config.option.numprocesses == 0:
config.option.dist = "no"
config.option.tx = []

val = config.getvalue
if not val("collectonly") and val("dist") != "no" and usepdb:
if not val("collectonly") and _is_distribution_mode(config) and usepdb:
raise pytest.UsageError(
"--pdb is incompatible with distributing tests; try using -n0 or -nauto."
) # noqa: E501
Expand Down
34 changes: 23 additions & 11 deletions testing/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,23 @@ def test_dist_options(pytester: pytest.Pytester) -> None:
check_options(config)
assert config.option.dist == "load"

config = pytester.parseconfigure("--numprocesses", "0")
check_options(config)
assert config.option.dist == "no"
assert config.option.tx == []

config = pytester.parseconfigure("--numprocesses", "0", "-d")
check_options(config)
assert config.option.dist == "no"
assert config.option.tx == []

config = pytester.parseconfigure(
"--numprocesses", "0", "--dist", "each", "--tx", "2*popen"
)
check_options(config)
assert config.option.dist == "no"
assert config.option.tx == []


def test_auto_detect_cpus(
pytester: pytest.Pytester, monkeypatch: pytest.MonkeyPatch
Expand Down Expand Up @@ -77,17 +94,12 @@ def test_auto_detect_cpus(
check_options(config)
assert config.getoption("numprocesses") == 99

config = pytester.parseconfigure("-nauto", "--pdb")
check_options(config)
assert config.getoption("usepdb")
assert config.getoption("numprocesses") == 0
assert config.getoption("dist") == "no"

config = pytester.parseconfigure("-nlogical", "--pdb")
check_options(config)
assert config.getoption("usepdb")
assert config.getoption("numprocesses") == 0
assert config.getoption("dist") == "no"
for numprocesses in (0, "auto", "logical"):
config = pytester.parseconfigure(f"-n{numprocesses}", "--pdb")
check_options(config)
assert config.getoption("usepdb")
assert config.getoption("numprocesses") == 0
assert config.getoption("dist") == "no"

monkeypatch.delattr(os, "sched_getaffinity", raising=False)
monkeypatch.setenv("TRAVIS", "true")
Expand Down

0 comments on commit fdf0669

Please sign in to comment.