diff --git a/.appveyor.yml b/.appveyor.yml index ea522dcb..8ece1688 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -10,7 +10,7 @@ environment: - TOXENV: "py38-pytestfeatures" install: - - C:\Python38\python -m pip install -U pip setuptools + - C:\Python38\python -m pip install -U pip setuptools virtualenv - C:\Python38\python -m pip install -U tox setuptools_scm build: false # Not a C# project, build stuff at the test step instead. diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 04f86d5b..9bd71da1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,4 +21,4 @@ repos: files: ^(CHANGELOG.rst|HOWTORELEASE.rst|README.rst|changelog/.*)$ language: python additional_dependencies: [pygments, restructuredtext_lint] - python_version: python3.7 + language_version: python3.7 diff --git a/changelog/486.feature b/changelog/486.feature.rst similarity index 100% rename from changelog/486.feature rename to changelog/486.feature.rst diff --git a/changelog/491.bugfix.rst b/changelog/491.bugfix.rst new file mode 100644 index 00000000..4f704239 --- /dev/null +++ b/changelog/491.bugfix.rst @@ -0,0 +1 @@ +Fix regression that caused custom plugin command-line arguments to be discarded when using ``--tx`` mode. diff --git a/src/xdist/workermanage.py b/src/xdist/workermanage.py index d95b481d..5f30edf2 100644 --- a/src/xdist/workermanage.py +++ b/src/xdist/workermanage.py @@ -190,6 +190,7 @@ def make_reltoroot(roots, args): parts = arg.split(splitcode) fspath = py.path.local(parts[0]) if not fspath.exists(): + result.append(arg) continue for root in roots: x = fspath.relto(root) diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index 4537fd0b..d93f08ed 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -186,16 +186,46 @@ def test_crash(): ) assert result.ret == 1 - def test_distribution_rsyncdirs_example(self, testdir): + def test_distribution_rsyncdirs_example(self, testdir, monkeypatch): + # use a custom plugin that has a custom command-line option to ensure + # this is propagated to workers (see #491) + testdir.makepyfile( + **{ + "myplugin/src/foobarplugin.py": """ + from __future__ import print_function + + import os + import sys + import pytest + + def pytest_addoption(parser): + parser.addoption("--foobar", action="store", dest="foobar_opt") + + @pytest.mark.tryfirst + def pytest_load_initial_conftests(early_config): + opt = early_config.known_args_namespace.foobar_opt + print("--foobar=%s active! [%s]" % (opt, os.getpid()), file=sys.stderr) + """ + } + ) + assert (testdir.tmpdir / "myplugin/src/foobarplugin.py").check(file=1) + monkeypatch.setenv( + "PYTHONPATH", str(testdir.tmpdir / "myplugin/src"), prepend=os.pathsep + ) + source = testdir.mkdir("source") dest = testdir.mkdir("dest") subdir = source.mkdir("example_pkg") subdir.ensure("__init__.py") p = subdir.join("test_one.py") p.write("def test_5():\n assert not __file__.startswith(%r)" % str(p)) - result = testdir.runpytest( + result = testdir.runpytest_subprocess( "-v", "-d", + "-s", + "-pfoobarplugin", + "--foobar=123", + "--dist=load", "--rsyncdir=%(subdir)s" % locals(), "--tx=popen//chdir=%(dest)s" % locals(), p, @@ -209,6 +239,7 @@ def test_distribution_rsyncdirs_example(self, testdir): "*1 passed*", ] ) + result.stderr.fnmatch_lines(["--foobar=123 active! *"]) assert dest.join(subdir.basename).check(dir=1) def test_backward_compatibility_worker_terminology(self, testdir):