From b04bbb1dcb91c327d747943862a53095c5d4269a Mon Sep 17 00:00:00 2001 From: Yusuke Kadowaki Date: Thu, 3 Nov 2022 20:42:56 +0900 Subject: [PATCH] Refactor the process of deleting dead symlink --- src/_pytest/pathlib.py | 13 ++++++++----- src/_pytest/tmpdir.py | 6 ++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index b2605430c..533335c66 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -335,6 +335,13 @@ def cleanup_candidates(root: Path, prefix: str, keep: int) -> Iterator[Path]: yield path +def cleanup_dead_symlink(root: Path): + for left_dir in root.iterdir(): + if left_dir.is_symlink(): + if not left_dir.resolve().exists(): + left_dir.unlink() + + def cleanup_numbered_dir( root: Path, prefix: str, keep: int, consider_lock_dead_if_created_before: float ) -> None: @@ -346,11 +353,7 @@ def cleanup_numbered_dir( for path in root.glob("garbage-*"): try_cleanup(path, consider_lock_dead_if_created_before) - # remove dead symlink - for left_dir in root.iterdir(): - if left_dir.is_symlink(): - if not left_dir.resolve().exists(): - left_dir.unlink() + cleanup_dead_symlink(root) def make_numbered_dir_with_cleanup( diff --git a/src/_pytest/tmpdir.py b/src/_pytest/tmpdir.py index 83fb27e60..7b8e42017 100644 --- a/src/_pytest/tmpdir.py +++ b/src/_pytest/tmpdir.py @@ -23,6 +23,7 @@ from .pathlib import LOCK_TIMEOUT from .pathlib import make_numbered_dir from .pathlib import make_numbered_dir_with_cleanup from .pathlib import rm_rf +from .pathlib import cleanup_dead_symlink from _pytest.compat import final from _pytest.config import Config from _pytest.config import ExitCode @@ -281,10 +282,7 @@ def tmp_path( basetemp = tmp_path_factory._basetemp if basetemp is None: return - for left_dir in basetemp.iterdir(): - if left_dir.is_symlink(): - if not left_dir.resolve().exists(): - left_dir.unlink() + cleanup_dead_symlink(basetemp) def pytest_sessionfinish(session, exitstatus: Union[int, ExitCode]):