Commit b7c057a1 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #28666: Now test.support.rmtree is able to remove unwritable or

unreadable directories.
parent bd20530e
......@@ -236,7 +236,38 @@ if sys.platform.startswith("win"):
else:
_unlink = os.unlink
_rmdir = os.rmdir
_rmtree = shutil.rmtree
def _rmtree(path):
import stat
try:
shutil.rmtree(path)
return
except EnvironmentError:
pass
def force_run(path, func, *args):
try:
return func(*args)
except EnvironmentError as err:
if verbose >= 2:
print('%s: %s' % (err.__class__.__name__, err))
print('re-run %s%r' % (func.__name__, args))
os.chmod(path, stat.S_IRWXU)
return func(*args)
def _rmtree_inner(path):
for name in force_run(path, os.listdir, path):
fullname = os.path.join(path, name)
try:
mode = os.lstat(fullname).st_mode
except EnvironmentError:
mode = 0
if stat.S_ISDIR(mode):
_rmtree_inner(fullname)
force_run(path, os.rmdir, fullname)
else:
force_run(path, os.unlink, fullname)
_rmtree_inner(path)
os.rmdir(path)
def unlink(filename):
try:
......
......@@ -262,6 +262,9 @@ Documentation
Tests
-----
- Issue #28666: Now test.test_support.rmtree is able to remove unwritable or
unreadable directories.
- Issue #23839: Various caches now are cleared before running every test file.
- Issue #27369: In test_pyexpat, avoid testing an error message detail that
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment