From de3969b9722a6a4dadc54acf4cefa44577cb0557 Mon Sep 17 00:00:00 2001 From: Lehman Garrison Date: Mon, 24 Feb 2025 09:44:37 -0500 Subject: [PATCH] fix: avoid races in filesystem ops Use `exist_ok` and `missing_ok` in pathlib operations where we can. --- bin/update_how_it_works_image.py | 3 +-- cibuildwheel/__main__.py | 3 +-- cibuildwheel/util/file.py | 3 +-- test/test_custom_repair_wheel.py | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/bin/update_how_it_works_image.py b/bin/update_how_it_works_image.py index 0ed36fafd..7f55326f6 100755 --- a/bin/update_how_it_works_image.py +++ b/bin/update_how_it_works_image.py @@ -42,8 +42,7 @@ def main() -> None: ) dest_path = Path("docs/data/how-it-works.png") - if dest_path.exists(): - dest_path.unlink() + dest_path.unlink(missing_ok=True) Path(screenshot).rename(dest_path) diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index d14f9f89f..2b43257a6 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -399,8 +399,7 @@ def build_in_directory(args: CommandLineArguments) -> None: output_dir = options.globals.output_dir - if not output_dir.exists(): - output_dir.mkdir(parents=True) + output_dir.mkdir(parents=True, exist_ok=True) tmp_path = Path(mkdtemp(prefix="cibw-run-")).resolve(strict=True) try: diff --git a/cibuildwheel/util/file.py b/cibuildwheel/util/file.py index c961651e9..4a59a7e0b 100644 --- a/cibuildwheel/util/file.py +++ b/cibuildwheel/util/file.py @@ -25,8 +25,7 @@ def download(url: str, dest: Path) -> None: print(f"+ Download {url} to {dest}") dest_dir = dest.parent - if not dest_dir.exists(): - dest_dir.mkdir(parents=True) + dest_dir.mkdir(parents=True, exist_ok=True) # we've had issues when relying on the host OS' CA certificates on Windows, # so we use certifi (this sounds odd but requests also does this by default) diff --git a/test/test_custom_repair_wheel.py b/test/test_custom_repair_wheel.py index 833639e3f..56dc059fd 100644 --- a/test/test_custom_repair_wheel.py +++ b/test/test_custom_repair_wheel.py @@ -21,8 +21,7 @@ name = f"spam-0.1.0-py2-none-{platform}.whl" dest = dest_dir / name dest_dir.mkdir(parents=True, exist_ok=True) -if dest.exists(): - dest.unlink() +dest.unlink(missing_ok=True) shutil.copy(wheel, dest) """