/usr/share/pyshared/zc/buildout/rmtree.py is in python-zc.buildout 1.7.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | ##############################################################################
#
# Copyright (c) 2006 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
import shutil
import os
import doctest
def rmtree (path):
"""
A variant of shutil.rmtree which tries hard to be successful
On windows shutil.rmtree aborts when it tries to delete a
read only file.
This tries to chmod the file to writeable and retries before giving up.
>>> from tempfile import mkdtemp
Let's make a directory ...
>>> d = mkdtemp()
and make sure it is actually there
>>> os.path.isdir (d)
1
Now create a file ...
>>> foo = os.path.join (d, 'foo')
>>> open (foo, 'w').write ('huhu')
and make it unwriteable
>>> os.chmod (foo, 0400)
rmtree should be able to remove it:
>>> rmtree (d)
and now the directory is gone
>>> os.path.isdir (d)
0
"""
def retry_writeable (func, path, exc):
os.chmod (path, 0600)
func (path)
shutil.rmtree (path, onerror = retry_writeable)
def test_suite():
return doctest.DocTestSuite()
if "__main__" == __name__:
doctest.testmod()
|