[commit: ghc] master: testsuite/driver: Fix deletion retry logic on Windows (6f9f5ff)
git at git.haskell.org
git at git.haskell.org
Mon Apr 24 16:54:04 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/6f9f5ff16599814d8b10869be6dd424a5f7645d8/ghc
>---------------------------------------------------------------
commit 6f9f5ff16599814d8b10869be6dd424a5f7645d8
Author: Ben Gamari <bgamari.foss at gmail.com>
Date: Mon Apr 24 09:41:56 2017 -0400
testsuite/driver: Fix deletion retry logic on Windows
Previously rmtree's error callback would throw an exception, breaking
out of the retry loop.
Test Plan: Validate on Windows
Reviewers: Phyx, austin
Reviewed By: Phyx
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3492
>---------------------------------------------------------------
6f9f5ff16599814d8b10869be6dd424a5f7645d8
testsuite/driver/testlib.py | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 457e380..1f08f5b 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -767,7 +767,10 @@ def test_common_work(watcher, name, opts, func, args):
t.n_tests_skipped += len(set(all_ways) - set(do_ways))
if config.cleanup and do_ways:
- cleanup()
+ try:
+ cleanup()
+ except Exception as e:
+ framework_fail(name, 'runTest', 'Unhandled exception during cleanup: ' + str(e))
package_conf_cache_file_end_timestamp = get_package_cache_timestamp();
@@ -1910,8 +1913,8 @@ if config.msys:
import time
def cleanup():
testdir = getTestOpts().testdir
- max_attemps = 5
- retries = max_attemps
+ max_attempts = 5
+ retries = max_attempts
def on_error(function, path, excinfo):
# At least one test (T11489) removes the write bit from a file it
# produces. Windows refuses to delete read-only files with a
@@ -1935,13 +1938,18 @@ if config.msys:
# with an even more cryptic error.
#
# See Trac #13162
+ exception = None
while retries > 0 and os.path.exists(testdir):
- time.sleep((max_attemps-retries)*6)
- shutil.rmtree(testdir, onerror=on_error, ignore_errors=False)
- retries=-1
+ time.sleep((max_attempts-retries)*6)
+ try:
+ shutil.rmtree(testdir, onerror=on_error, ignore_errors=False)
+ except Exception as e:
+ exception = e
+ retries -= 1
if retries == 0 and os.path.exists(testdir):
- raise Exception("Unable to remove folder '" + testdir + "'. Unable to start current test.")
+ raise Exception("Unable to remove folder '%s': %s\nUnable to start current test."
+ % (testdir, exception))
else:
def cleanup():
testdir = getTestOpts().testdir
More information about the ghc-commits
mailing list