fix #8464 wrong root dir when -c is passed
This commit is contained in:
parent
d2f3d40510
commit
9078c3ce23
1
AUTHORS
1
AUTHORS
|
@ -5,6 +5,7 @@ Contributors include::
|
|||
|
||||
Aaron Coleman
|
||||
Abdeali JK
|
||||
Abdelrahman Elbehery
|
||||
Abhijeet Kasurde
|
||||
Adam Johnson
|
||||
Adam Uhlir
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
``-c <config file>`` now also properly defines ``rootdir`` as the directory that contains ``<config file>``.
|
|
@ -145,6 +145,8 @@ Finding the ``rootdir``
|
|||
|
||||
Here is the algorithm which finds the rootdir from ``args``:
|
||||
|
||||
- If ``-c`` is passed in the command-line, use that as configuration file, and its directory as ``rootdir``.
|
||||
|
||||
- Determine the common ancestor directory for the specified ``args`` that are
|
||||
recognised as paths that exist in the file system. If no such paths are
|
||||
found, the common ancestor directory is set to the current working directory.
|
||||
|
@ -160,7 +162,7 @@ Here is the algorithm which finds the rootdir from ``args``:
|
|||
``setup.cfg`` in each of the specified ``args`` and upwards. If one is
|
||||
matched, it becomes the ``configfile`` and its directory becomes the ``rootdir``.
|
||||
|
||||
- If no ``configfile`` was found, use the already determined common ancestor as root
|
||||
- If no ``configfile`` was found and no configuration argument is passed, use the already determined common ancestor as root
|
||||
directory. This allows the use of pytest in structures that are not part of
|
||||
a package and don't have any particular configuration file.
|
||||
|
||||
|
|
|
@ -176,7 +176,7 @@ def determine_setup(
|
|||
inipath: Optional[Path] = inipath_
|
||||
inicfg = load_config_dict_from_file(inipath_) or {}
|
||||
if rootdir_cmd_arg is None:
|
||||
rootdir = get_common_ancestor(dirs)
|
||||
rootdir = inipath_.parent
|
||||
else:
|
||||
ancestor = get_common_ancestor(dirs)
|
||||
rootdir, inipath, inicfg = locate_config([ancestor])
|
||||
|
|
|
@ -1405,6 +1405,26 @@ class TestRootdir:
|
|||
assert inipath == p
|
||||
assert ini_config == {"x": "10"}
|
||||
|
||||
def test_explicit_config_file_sets_rootdir(
|
||||
self, tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
tests_dir = tmp_path / "tests"
|
||||
tests_dir.mkdir()
|
||||
|
||||
monkeypatch.chdir(tmp_path)
|
||||
|
||||
# No config file is explicitly given: rootdir is determined to be cwd.
|
||||
rootpath, found_inipath, *_ = determine_setup(None, [str(tests_dir)])
|
||||
assert rootpath == tmp_path
|
||||
assert found_inipath is None
|
||||
|
||||
# Config file is explicitly given: rootdir is determined to be inifile's directory.
|
||||
inipath = tmp_path / "pytest.ini"
|
||||
inipath.touch()
|
||||
rootpath, found_inipath, *_ = determine_setup(str(inipath), [str(tests_dir)])
|
||||
assert rootpath == tmp_path
|
||||
assert found_inipath == inipath
|
||||
|
||||
def test_with_arg_outside_cwd_without_inifile(
|
||||
self, tmp_path: Path, monkeypatch: MonkeyPatch
|
||||
) -> None:
|
||||
|
|
Loading…
Reference in New Issue