parent
15d8293241
commit
36c8bb492e
|
@ -0,0 +1 @@
|
||||||
|
Fix handling of command-line options that appear as paths but trigger an OS-level syntax error on Windows, such as the options used internally by ``pytest-xdist``.
|
|
@ -1,6 +1,5 @@
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
import sys
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
from typing import List
|
from typing import List
|
||||||
|
@ -146,20 +145,13 @@ def get_dirs_from_args(args: Iterable[str]) -> List[Path]:
|
||||||
return path
|
return path
|
||||||
return path.parent
|
return path.parent
|
||||||
|
|
||||||
if sys.version_info < (3, 8):
|
def safe_exists(path: Path) -> bool:
|
||||||
|
# This can throw on paths that contain characters unrepresentable at the OS level,
|
||||||
def safe_exists(path: Path) -> bool:
|
# or with invalid syntax on Windows
|
||||||
# On Python<3.8, this can throw on paths that contain characters
|
try:
|
||||||
# unrepresentable at the OS level.
|
|
||||||
try:
|
|
||||||
return path.exists()
|
|
||||||
except OSError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
def safe_exists(path: Path) -> bool:
|
|
||||||
return path.exists()
|
return path.exists()
|
||||||
|
except OSError:
|
||||||
|
return False
|
||||||
|
|
||||||
# These look like paths but may not exist
|
# These look like paths but may not exist
|
||||||
possible_paths = (
|
possible_paths = (
|
||||||
|
|
|
@ -2,6 +2,7 @@ from textwrap import dedent
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from _pytest.config.findpaths import get_common_ancestor
|
from _pytest.config.findpaths import get_common_ancestor
|
||||||
|
from _pytest.config.findpaths import get_dirs_from_args
|
||||||
from _pytest.config.findpaths import load_config_dict_from_file
|
from _pytest.config.findpaths import load_config_dict_from_file
|
||||||
from _pytest.pathlib import Path
|
from _pytest.pathlib import Path
|
||||||
|
|
||||||
|
@ -108,3 +109,17 @@ class TestCommonAncestor:
|
||||||
fn = tmp_path / "foo.py"
|
fn = tmp_path / "foo.py"
|
||||||
fn.touch()
|
fn.touch()
|
||||||
assert get_common_ancestor([fn]) == tmp_path
|
assert get_common_ancestor([fn]) == tmp_path
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_dirs_from_args(tmp_path):
|
||||||
|
"""get_dirs_from_args() skips over non-existing directories and files"""
|
||||||
|
fn = tmp_path / "foo.py"
|
||||||
|
fn.touch()
|
||||||
|
d = tmp_path / "tests"
|
||||||
|
d.mkdir()
|
||||||
|
option = "--foobar=/foo.txt"
|
||||||
|
# xdist uses options in this format for its rsync feature (#7638)
|
||||||
|
xdist_rsync_option = "popen=c:/dest"
|
||||||
|
assert get_dirs_from_args(
|
||||||
|
[str(fn), str(tmp_path / "does_not_exist"), str(d), option, xdist_rsync_option]
|
||||||
|
) == [fn.parent, d]
|
||||||
|
|
Loading…
Reference in New Issue