@@ -182,6 +182,16 @@ def unload(name):
182
182
except KeyError :
183
183
pass
184
184
185
+ def _force_run (path , func , * args ):
186
+ try :
187
+ return func (* args )
188
+ except EnvironmentError as err :
189
+ if verbose >= 2 :
190
+ print ('%s: %s' % (err .__class__ .__name__ , err ))
191
+ print ('re-run %s%r' % (func .__name__ , args ))
192
+ os .chmod (path , stat .S_IRWXU )
193
+ return func (* args )
194
+
185
195
if sys .platform .startswith ("win" ):
186
196
def _waitfor (func , pathname , waitall = False ):
187
197
# Perform the operation
@@ -224,13 +234,13 @@ def _rmdir(dirname):
224
234
225
235
def _rmtree (path ):
226
236
def _rmtree_inner (path ):
227
- for name in os .listdir ( path ):
237
+ for name in _force_run ( path , os .listdir , path ):
228
238
fullname = os .path .join (path , name )
229
239
if os .path .isdir (fullname ):
230
240
_waitfor (_rmtree_inner , fullname , waitall = True )
231
- os .rmdir ( fullname )
241
+ _force_run ( path , os .rmdir , fullname )
232
242
else :
233
- os .unlink ( fullname )
243
+ _force_run ( path , os .unlink , fullname )
234
244
_waitfor (_rmtree_inner , path , waitall = True )
235
245
_waitfor (os .rmdir , path )
236
246
else :
@@ -245,27 +255,18 @@ def _rmtree(path):
245
255
except EnvironmentError :
246
256
pass
247
257
248
- def force_run (path , func , * args ):
249
- try :
250
- return func (* args )
251
- except EnvironmentError as err :
252
- if verbose >= 2 :
253
- print ('%s: %s' % (err .__class__ .__name__ , err ))
254
- print ('re-run %s%r' % (func .__name__ , args ))
255
- os .chmod (path , stat .S_IRWXU )
256
- return func (* args )
257
258
def _rmtree_inner (path ):
258
- for name in force_run (path , os .listdir , path ):
259
+ for name in _force_run (path , os .listdir , path ):
259
260
fullname = os .path .join (path , name )
260
261
try :
261
262
mode = os .lstat (fullname ).st_mode
262
263
except EnvironmentError :
263
264
mode = 0
264
265
if stat .S_ISDIR (mode ):
265
266
_rmtree_inner (fullname )
266
- force_run (path , os .rmdir , fullname )
267
+ _force_run (path , os .rmdir , fullname )
267
268
else :
268
- force_run (path , os .unlink , fullname )
269
+ _force_run (path , os .unlink , fullname )
269
270
_rmtree_inner (path )
270
271
os .rmdir (path )
271
272
0 commit comments