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