writedict: use write_atomic for exceptions
authorZac Medico <zmedico@gentoo.org>
Wed, 25 May 2011 05:42:24 +0000 (22:42 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 26 May 2011 06:12:38 +0000 (23:12 -0700)
Also, fix calling code to handle InvalidLocation exceptions.

pym/portage/dbapi/vartree.py
pym/portage/util/__init__.py

index b7d3710a39292f5570fa9bb7ce5d63c0a7ce2279..b257aac47e0bc576eabfb1d3d992a048655b4666 100644 (file)
@@ -3640,9 +3640,7 @@ class dblink(object):
                        cfgfiledict.pop("IGNORE", None)
                        try:
                                writedict(cfgfiledict, conf_mem_file)
-                       except IOError as e:
-                               if e.errno != errno.ENOENT:
-                                       raise
+                       except InvalidLocation:
                                self.settings._init_dirs()
                                writedict(cfgfiledict, conf_mem_file)
 
index 60b9575a91dba7110c8c40110249dd27f1bc8005..61e5e4e53960d8648c64109452a5c2a28426111b 100644 (file)
@@ -457,20 +457,14 @@ def grablines(myfilename, recursive=0, remember_source_file=False):
 def writedict(mydict,myfilename,writekey=True):
        """Writes out a dict to a file; writekey=0 mode doesn't write out
        the key and assumes all values are strings, not lists."""
-       myfile = None
-       try:
-               myfile = atomic_ofstream(myfilename)
-               if not writekey:
-                       for x in mydict.values():
-                               myfile.write(x+"\n")
-               else:
-                       for x in mydict:
-                               myfile.write("%s %s\n" % (x, " ".join(mydict[x])))
-               myfile.close()
-       except IOError:
-               if myfile is not None:
-                       myfile.abort()
-               raise
+       lines = []
+       if not writekey:
+               for v in mydict.values():
+                       lines.append(v + "\n")
+       else:
+               for k, v in mydict.items():
+                       lines.append("%s %s\n" % (k, " ".join(v)))
+       write_atomic(myfilename, "".join(lines))
 
 def shlex_split(s):
        """