--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/rmtree.py Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,66 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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()