# HG changeset patch # User wbell # Date 1204749835 0 # Node ID 8c3dfe0efe78195cfc997a1d53abea262ac78f25 # Parent b1d346c4e53928cb6eb143608d8e1fc1261c05a8 Committing rmtree patch for windows submitted by Doug Patterson. Thanks! Closes #211, #183, #236. diff --git a/bitten/slave.py b/bitten/slave.py --- 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()