1
0
Fork 0

added secure delete function

This commit is contained in:
Christian Kühnel 2020-04-15 18:16:41 +02:00
parent 651bf69a89
commit eaa931da8c

View file

@ -121,11 +121,7 @@ def run_cmake(projects: str, repo_path: str, config_file_path: str = None, *, dr
build_dir = os.path.abspath(os.path.join(repo_path, 'build'))
if not dryrun:
if os.path.exists(build_dir):
shutil.rmtree(build_dir)
while os.path.exists(build_dir):
print('Waiting for folder to really be deleted...')
time.sleep(1)
secure_delete(build_dir)
os.makedirs(build_dir)
env = _create_env(config)
@ -147,6 +143,25 @@ def run_cmake(projects: str, repo_path: str, config_file_path: str = None, *, dr
_link_compile_commands(config, repo_path, build_dir)
def secure_delete(path: str):
"""Try do delete a local folder.
Deleting folders on Windows can be tricky and frequently fails.
In most cases this can be recovered by waiting some time and then trying again.
"""
error_limit = 5
while error_limit > 0:
error_limit -= 1
if not os.path.exists(path):
return
try:
shutil.rmtree(path)
except PermissionError:
pass
time.sleep(3)
raise IOError('Could not delete build folder after several tries: {}'.format(path))
def _link_compile_commands(config: Configuration, repo_path: str, build_dir: str):
"""Link compile_commands.json from build to root dir"""
if config.operating_system != OperatingSystem.Linux: