##############################################################################
#
# Copyright (c) 2005 Zope Corporation 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.
#
##############################################################################
"""Miscellaneous utilities."""
__all__ = ["rmtree_force",
]
def rmtree_force(path):
"""Like shutil.rmtree(path), but deletes read-only files too.
This is an important distinction on Windows, where a file marked
read-only cannot be deleted by os.remove().
"""
import shutil
import os
if not os.path.exists(path):
return
# Python 2.4's rmtree has a sufficient error hook, but 2.3's does not.
# So, make everything readable first by walking the tree.
for root, dirs, files in os.walk(path):
for fname in files:
os.chmod(os.path.join(root, fname), 0666)
shutil.rmtree(path)
syntax highlighted by Code2HTML, v. 0.9.1