diff options
author | Christoph Reiter <reiter.christoph@gmail.com> | 2020-11-20 15:30:37 +0100 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2020-11-23 09:26:41 -0800 |
commit | abc7e6af01714206100a752898c325282436501f (patch) | |
tree | d057fb165f38b1ad71fe483634c11967a6e5b942 /mesonbuild/mesonlib.py | |
parent | 1db800bf67fc80abee313381aac0528ee33103c9 (diff) | |
download | meson-abc7e6af01714206100a752898c325282436501f.zip meson-abc7e6af01714206100a752898c325282436501f.tar.gz meson-abc7e6af01714206100a752898c325282436501f.tar.bz2 |
Add a variant of TemporaryDirectory that uses windows_proof_rmtree()
Adds TemporaryDirectoryWinProof which calls windows_proof_rmtree() on
error.
Use instead of hacky error handling (which might shadow other OSError)
in Compiler.compile().
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r-- | mesonbuild/mesonlib.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index bb6a748..d46dfca 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -22,6 +22,7 @@ import collections from enum import IntEnum from functools import lru_cache, wraps from itertools import tee, filterfalse +from tempfile import TemporaryDirectory import typing as T import uuid import textwrap @@ -1452,6 +1453,25 @@ def windows_proof_rm(fpath: str) -> None: os.unlink(fpath) +class TemporaryDirectoryWinProof(TemporaryDirectory): + """ + Like TemporaryDirectory, but cleans things up using + windows_proof_rmtree() + """ + + def __exit__(self, exc: T.Any, value: T.Any, tb: T.Any) -> None: + try: + super().__exit__(exc, value, tb) + except OSError: + windows_proof_rmtree(self.name) + + def cleanup(self) -> None: + try: + super().cleanup() + except OSError: + windows_proof_rmtree(self.name) + + def detect_subprojects(spdir_name: str, current_dir: str = '', result: T.Optional[T.Dict[str, T.List[str]]] = None) -> T.Optional[T.Dict[str, T.List[str]]]: if result is None: |