Jannis Leidel  committed 53d770a

Fixed #31 -- Correctly remove read-only attributes of build files in rmtree_errorhandler.

  • Participants
  • Parent commits d67055e
  • Branches trunk

Comments (0)

Files changed (1)

 import shutil
 import fnmatch
 import operator
+import stat
     from hashlib import md5
 except ImportError:
         raise typ, val, tb
+def rmtree_errorhandler(func, path, exc_info):
+    """On Windows, the files in .svn are read-only, so when rmtree() tries to
+    remove them, an exception is thrown.  We catch that here, remove the
+    read-only attribute, and hopefully continue without problems."""
+    exctype, value = exc_info[:2]
+    # lookin for a windows error
+    if exctype is not WindowsError or 'Access is denied' not in str(value):
+        raise
+    # file type should currently be read only
+    if ((os.stat(path).st_mode & stat.S_IREAD) != stat.S_IREAD):
+        raise
+    # convert to read/write
+    os.chmod(path, stat.S_IWRITE)
+    # use the original function to repeat the operation
+    func(path)
 class VcsSupport(object):
     _registry = {}
     schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp']