From decd4f277bdf24c796c26cd4732a190a34453872 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sun, 15 Apr 2007 10:03:53 +0000 Subject: [PATCH] When saving user_overrides, pick a random name for the tmp file, not just "$name.new". There may be several background processes trying to store the 'last-check-attempt' time at once. git-svn-id: file:///home/talex/Backups/sf.net/Subversion/zero-install/trunk/0launch@1674 9f8c893c-44ee-0310-b757-c8ca8341c71e --- zeroinstall/injector/writer.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/zeroinstall/injector/writer.py b/zeroinstall/injector/writer.py index 726279c..c922d27 100644 --- a/zeroinstall/injector/writer.py +++ b/zeroinstall/injector/writer.py @@ -23,9 +23,7 @@ def _add_impl(parent, impl): node.setAttribute('id', impl.id) def save_interface(interface): - path = basedir.save_config_path(config_site, config_prog, 'user_overrides') - path = os.path.join(path, escape(interface.uri)) - #print "Save to", path + user_overrides = basedir.save_config_path(config_site, config_prog, 'user_overrides') impl = minidom.getDOMImplementation() doc = impl.createDocument(XMLNS_IFACE, 'interface-preferences', None) @@ -56,5 +54,12 @@ def save_interface(interface): if feed.arch: elem.setAttribute('arch', feed.arch) - doc.writexml(file(path + '.new', 'w'), addindent = " ", newl = '\n') - os.rename(path + '.new', path) + import tempfile + tmp_fd, tmp_name = tempfile.mkstemp(dir = user_overrides) + try: + doc.writexml(os.fdopen(tmp_fd, 'w'), addindent = " ", newl = '\n') + path = os.path.join(user_overrides, escape(interface.uri)) + os.rename(tmp_name, path) + except: + os.unlink(tmp_name) + raise -- 2.11.4.GIT