From 038a59eebcde364c7bdee22fd584e67af0c52bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ionel=20Cristian=20M=C4=83rie=C8=99?= Date: Fri, 20 Dec 2019 02:00:02 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20regression=20with=20custom=20arguments=20?= =?UTF-8?q?being=20dropped=20in=20non-local=E2=80=A6=20(#491)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * No idea what I'm doing. * Extend integration test to cover ac3f6a78c7401aba9b62c2c67f280a129ae84eaf. * Remove useless output to stop failing other tests. * Reformat. * Upgrade virtualenv to see if it fixes py34 builds * Add CHANGELOG entry * Make foobarplugin part of the test only * Fix language_version in pre-commit for rst * Fix test in Python 2 Co-authored-by: Bruno Oliveira --- .appveyor.yml | 2 +- .pre-commit-config.yaml | 2 +- changelog/{486.feature => 486.feature.rst} | 0 changelog/491.bugfix.rst | 1 + src/xdist/workermanage.py | 1 + testing/acceptance_test.py | 35 ++++++++++++++++++++-- 6 files changed, 37 insertions(+), 4 deletions(-) rename changelog/{486.feature => 486.feature.rst} (100%) create mode 100644 changelog/491.bugfix.rst diff --git a/.appveyor.yml b/.appveyor.yml index ea522dc..8ece168 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 04f86d5..9bd71da 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 0000000..4f70423 --- /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 d95b481..5f30edf 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 4537fd0..d93f08e 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -186,16 +186,46 @@ class TestDistribution: ) 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 @@ class TestDistribution: "*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):