diff options
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r-- | mesonbuild/mesonlib.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index 6937502..415bc50 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -15,6 +15,7 @@ """A library of random helper functionality.""" import stat +import time import platform, subprocess, operator, os, shutil, re import collections @@ -687,6 +688,22 @@ def get_filenames_templates_dict(inputs, outputs): values['@OUTDIR@'] = '.' return values + +def windows_proof_rmtree(f): + # On Windows if anyone is holding a file open you can't + # delete it. As an example an anti virus scanner might + # be scanning files you are trying to delete. The only + # way to fix this is to try again and again. + delays = [0.1, 0.1, 0.2, 0.2, 0.2, 0.5, 0.5, 1, 1, 1, 1, 2] + for d in delays: + try: + shutil.rmtree(f) + return + except (OSError, PermissionError): + time.sleep(d) + # Try one last time and throw if it fails. + shutil.rmtree(f) + class OrderedSet(collections.MutableSet): """A set that preserves the order in which items are added, by first insertion. |