From a65adf74f990eeac0d90011476376c7239cb7af5 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Thu, 3 Nov 2016 10:37:53 -0700 Subject: Workaround shutil.rmtree limitation on Windows By default, shutil.rmtree raises an exception when deleting readonly files on Windows. Replace all shutil.rmtree with platform_utils.rmtree, which adds an error handler to make files read-write when they can't be deleted. Change-Id: I9cfea9a7b3703fb16a82cf69331540c2c179ed53 --- platform_utils.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'platform_utils.py') diff --git a/platform_utils.py b/platform_utils.py index f4dfa0b1..4417c5a3 100644 --- a/platform_utils.py +++ b/platform_utils.py @@ -16,6 +16,8 @@ import os import platform import select +import shutil +import stat from Queue import Queue from threading import Thread @@ -210,3 +212,16 @@ def _winpath_is_valid(path): return tail[0] == os.sep # "x:foo" is invalid else: return not drive # "x:" is invalid + + +def rmtree(path): + if isWindows(): + shutil.rmtree(path, onerror=handle_rmtree_error) + else: + shutil.rmtree(path) + + +def handle_rmtree_error(function, path, excinfo): + # Allow deleting read-only files + os.chmod(path, stat.S_IWRITE) + function(path) -- cgit v1.2.3-54-g00ecf