Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
7b4fd297
Commit
7b4fd297
authored
Nov 20, 2016
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #28666: Now test.support.rmtree is able to remove unwritable or
unreadable directories.
parents
8cf736e7
736c3b76
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
13 deletions
+57
-13
Lib/test/support/__init__.py
Lib/test/support/__init__.py
+31
-1
Lib/test/test_support.py
Lib/test/test_support.py
+23
-12
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/support/__init__.py
View file @
7b4fd297
...
...
@@ -358,7 +358,37 @@ if sys.platform.startswith("win"):
else
:
_unlink
=
os
.
unlink
_rmdir
=
os
.
rmdir
_rmtree
=
shutil
.
rmtree
def
_rmtree
(
path
):
try
:
shutil
.
rmtree
(
path
)
return
except
OSError
:
pass
def
force_run
(
path
,
func
,
*
args
):
try
:
return
func
(
*
args
)
except
OSError
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
OSError
:
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
:
...
...
Lib/test/test_support.py
View file @
7b4fd297
import
importlib
import
shutil
import
stat
import
sys
import
os
import
unittest
...
...
@@ -12,9 +13,6 @@ TESTFN = support.TESTFN
class
TestSupport
(
unittest
.
TestCase
):
def
setUp
(
self
):
support
.
unlink
(
TESTFN
)
tearDown
=
setUp
def
test_import_module
(
self
):
support
.
import_module
(
"ftplib"
)
...
...
@@ -46,15 +44,28 @@ class TestSupport(unittest.TestCase):
support
.
unlink
(
TESTFN
)
def
test_rmtree
(
self
):
TESTDIRN
=
os
.
path
.
basename
(
tempfile
.
mkdtemp
(
dir
=
'.'
))
self
.
addCleanup
(
support
.
rmtree
,
TESTDIRN
)
support
.
rmtree
(
TESTDIRN
)
os
.
mkdir
(
TESTDIRN
)
os
.
mkdir
(
os
.
path
.
join
(
TESTDIRN
,
TESTDIRN
))
support
.
rmtree
(
TESTDIRN
)
self
.
assertFalse
(
os
.
path
.
exists
(
TESTDIRN
))
support
.
rmtree
(
TESTDIRN
)
dirpath
=
support
.
TESTFN
+
'd'
subdirpath
=
os
.
path
.
join
(
dirpath
,
'subdir'
)
os
.
mkdir
(
dirpath
)
os
.
mkdir
(
subdirpath
)
support
.
rmtree
(
dirpath
)
self
.
assertFalse
(
os
.
path
.
exists
(
dirpath
))
with
support
.
swap_attr
(
support
,
'verbose'
,
0
):
support
.
rmtree
(
dirpath
)
os
.
mkdir
(
dirpath
)
os
.
mkdir
(
subdirpath
)
os
.
chmod
(
dirpath
,
stat
.
S_IRUSR
|
stat
.
S_IXUSR
)
with
support
.
swap_attr
(
support
,
'verbose'
,
0
):
support
.
rmtree
(
dirpath
)
self
.
assertFalse
(
os
.
path
.
exists
(
dirpath
))
os
.
mkdir
(
dirpath
)
os
.
mkdir
(
subdirpath
)
os
.
chmod
(
dirpath
,
0
)
with
support
.
swap_attr
(
support
,
'verbose'
,
0
):
support
.
rmtree
(
dirpath
)
self
.
assertFalse
(
os
.
path
.
exists
(
dirpath
))
def
test_forget
(
self
):
mod_filename
=
TESTFN
+
'.py'
...
...
Misc/NEWS
View file @
7b4fd297
...
...
@@ -82,6 +82,9 @@ Documentation
Tests
-----
- Issue #28666: Now test.support.rmtree is able to remove unwritable or
unreadable directories.
- Issue #23839: Various caches now are cleared before running every test file.
Build
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment