changeset 474:8c3dfe0efe78

Committing rmtree patch for windows submitted by Doug Patterson. Thanks! Closes #211, #183, #236.
author wbell
date Wed, 05 Mar 2008 20:43:55 +0000
parents b1d346c4e539
children 7562b9dd22b8
files bitten/slave.py
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/slave.py
+++ b/bitten/slave.py
@@ -35,6 +35,12 @@
 temp_net_errors = [errno.ENETUNREACH, errno.ENETDOWN, errno.ETIMEDOUT,
                    errno.ECONNREFUSED]
 
+def _rmtree(root):
+    """Catch shutil.rmtree failures on Windows when files are read-only."""
+    def _handle_error(fn, path, excinfo):
+       os.chmod(path, 0666)
+       fn(path)
+    return shutil.rmtree(root, onerror=_handle_error) 
 
 class SaneHTTPErrorProcessor(urllib2.HTTPErrorProcessor):
     "The HTTPErrorProcessor defined in urllib needs some love."
@@ -229,7 +235,7 @@
         finally:
             if not self.keep_files:
                 log.debug('Removing build directory %s' % basedir)
-                shutil.rmtree(basedir)
+                _rmtree(basedir)
             if self.single_build:
                 log.info('Exiting after single build completed.')
                 raise ExitSlave()
@@ -380,7 +386,7 @@
 
     if not options.work_dir:
         log.debug('Removing temporary directory %s' % slave.work_dir)
-        shutil.rmtree(slave.work_dir)
+        _rmtree(slave.work_dir)
 
 if __name__ == '__main__':
     main()
Copyright (C) 2012-2017 Edgewall Software