config: fallback confcutdir to rootpath if inipath is not set
Currently, if `--confcutdir` is not set, `inipath.parent` is used, and if `initpath` is not set, then `confcutdir` is None, which means there is no cutoff. Having no cutoff is not great, it means we potentially start probing stuff all the way up to the filesystem root directory. So let's add another fallback, to `rootpath`, which is always something reasonable.
This commit is contained in:
parent
4f3f36c396
commit
4a1bba25b9
|
@ -0,0 +1,3 @@
|
||||||
|
When `--confcutdir` is not specified, and there is no config file present, the conftest cutoff directory (`--confcutdir`) is now set to the :ref:`rootdir`.
|
||||||
|
Previously in such cases, `conftest.py` files would be probed all the way to the root directory of the filesystem.
|
||||||
|
If you are badly affected by this change, consider adding an empty config file to your desired cutoff directory, or explicitly set `--confcutdir`.
|
|
@ -1261,8 +1261,11 @@ class Config:
|
||||||
_pytest.deprecated.STRICT_OPTION, stacklevel=2
|
_pytest.deprecated.STRICT_OPTION, stacklevel=2
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.known_args_namespace.confcutdir is None and self.inipath is not None:
|
if self.known_args_namespace.confcutdir is None:
|
||||||
confcutdir = str(self.inipath.parent)
|
if self.inipath is not None:
|
||||||
|
confcutdir = str(self.inipath.parent)
|
||||||
|
else:
|
||||||
|
confcutdir = str(self.rootpath)
|
||||||
self.known_args_namespace.confcutdir = confcutdir
|
self.known_args_namespace.confcutdir = confcutdir
|
||||||
try:
|
try:
|
||||||
self.hook.pytest_load_initial_conftests(
|
self.hook.pytest_load_initial_conftests(
|
||||||
|
|
|
@ -179,6 +179,23 @@ class TestParseIni:
|
||||||
assert result.ret != 0
|
assert result.ret != 0
|
||||||
result.stderr.fnmatch_lines("ERROR: *pyproject.toml: Invalid statement*")
|
result.stderr.fnmatch_lines("ERROR: *pyproject.toml: Invalid statement*")
|
||||||
|
|
||||||
|
def test_confcutdir_default_without_configfile(self, pytester: Pytester) -> None:
|
||||||
|
# If --confcutdir is not specified, and there is no configfile, default
|
||||||
|
# to the roothpath.
|
||||||
|
sub = pytester.mkdir("sub")
|
||||||
|
os.chdir(sub)
|
||||||
|
config = pytester.parseconfigure()
|
||||||
|
assert config.pluginmanager._confcutdir == sub
|
||||||
|
|
||||||
|
def test_confcutdir_default_with_configfile(self, pytester: Pytester) -> None:
|
||||||
|
# If --confcutdir is not specified, and there is a configfile, default
|
||||||
|
# to the configfile's directory.
|
||||||
|
pytester.makeini("[pytest]")
|
||||||
|
sub = pytester.mkdir("sub")
|
||||||
|
os.chdir(sub)
|
||||||
|
config = pytester.parseconfigure()
|
||||||
|
assert config.pluginmanager._confcutdir == pytester.path
|
||||||
|
|
||||||
@pytest.mark.xfail(reason="probably not needed")
|
@pytest.mark.xfail(reason="probably not needed")
|
||||||
def test_confcutdir(self, pytester: Pytester) -> None:
|
def test_confcutdir(self, pytester: Pytester) -> None:
|
||||||
sub = pytester.mkdir("sub")
|
sub = pytester.mkdir("sub")
|
||||||
|
|
|
@ -594,7 +594,13 @@ class TestConftestVisibility:
|
||||||
print("pytestarg : %s" % testarg)
|
print("pytestarg : %s" % testarg)
|
||||||
print("expected pass : %s" % expect_ntests_passed)
|
print("expected pass : %s" % expect_ntests_passed)
|
||||||
os.chdir(dirs[chdir])
|
os.chdir(dirs[chdir])
|
||||||
reprec = pytester.inline_run(testarg, "-q", "--traceconfig")
|
reprec = pytester.inline_run(
|
||||||
|
testarg,
|
||||||
|
"-q",
|
||||||
|
"--traceconfig",
|
||||||
|
"--confcutdir",
|
||||||
|
pytester.path,
|
||||||
|
)
|
||||||
reprec.assertoutcome(passed=expect_ntests_passed)
|
reprec.assertoutcome(passed=expect_ntests_passed)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue