wingo - in flumotion/trunk: . flumotion/common

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Wed Jun 13 12:55:20 CEST 2007


Author: wingo
Date: Wed Jun 13 12:55:15 2007
New Revision: 5164

Modified:
   flumotion/trunk/ChangeLog
   flumotion/trunk/flumotion/common/bundle.py
Log:
2007-06-13  Andy Wingo  <wingo at pobox.com>

	* flumotion/common/bundle.py (Unbundler.unbundle): Write files
	atomically. Fixes #373.



Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog	(original)
+++ flumotion/trunk/ChangeLog	Wed Jun 13 12:55:15 2007
@@ -1,5 +1,8 @@
 2007-06-13  Andy Wingo  <wingo at pobox.com>
 
+	* flumotion/common/bundle.py (Unbundler.unbundle): Write files
+	atomically. Fixes #373.
+
 	* flumotion/admin/admin.py (AdminModel.connectToManager): 
 	* flumotion/job/job.py (JobMedium._createComponent): 
 	* flumotion/worker/medium.py (WorkerMedium.startConnecting): 

Modified: flumotion/trunk/flumotion/common/bundle.py
==============================================================================
--- flumotion/trunk/flumotion/common/bundle.py	(original)
+++ flumotion/trunk/flumotion/common/bundle.py	Wed Jun 13 12:55:15 2007
@@ -28,6 +28,7 @@
 import os
 import sys
 import zipfile
+import tempfile
 import StringIO
 
 from flumotion.common import errors, dag
@@ -156,9 +157,13 @@
                 if err.errno != errno.EEXIST or not os.path.isdir(parent):
                     raise
             data = zip.read(filepath)
-            handle = open(path, 'wb')
+
+            # atomically write to path, see #373
+            fd, tempname = tempfile.mkstemp(dir=parent)
+            handle = os.fdopen(fd)
             handle.write(data)
             handle.close()
+            os.rename(tempname, path)
         return dir
         
 class Bundler:


More information about the flumotion-commit mailing list