]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
Changes to fileutil.
authorDaira Hopwood <david-sarah@jacaranda.org>
Mon, 8 Apr 2013 22:16:56 +0000 (23:16 +0100)
committerDaira Hopwood <daira@jacaranda.org>
Wed, 9 Apr 2014 00:33:54 +0000 (01:33 +0100)
Signed-off-by: David-Sarah Hopwood <david-sarah@jacaranda.org>
src/allmydata/node.py
src/allmydata/util/fileutil.py

index 4dccf965dcf4c11739f3ab479c30fab8ee956fd6..af0429c3de87a64ca782b839d4559cd27595edbb 100644 (file)
@@ -287,11 +287,11 @@ class Node(service.MultiService):
             fileutil.write(privpath, value, mode="")
         return value
 
-    def write_config(self, name, value, mode="w"):
+    def write_config(self, name, value, mode=""):
         """Write a string to a config file."""
         fn = os.path.join(self.basedir, name)
         try:
-            fileutil.write(fn, value, mode)
+            fileutil.write(fn, value, mode=mode)
         except EnvironmentError, e:
             self.log("Unable to write config file '%s'" % fn)
             self.log(e)
index 56aa419baa477fb040ef0319a5b73b67b636b2ba..804ddb4f530f872ffe704d95161b4dbdd13ef14f 100644 (file)
@@ -2,7 +2,7 @@
 Futz with files like a pro.
 """
 
-import sys, exceptions, os, stat, tempfile, time, binascii
+import errno, sys, exceptions, os, re, stat, tempfile, time, binascii
 
 from twisted.python import log
 
@@ -202,10 +202,12 @@ def rm_dir(dirname):
             else:
                 remove(fullname)
         os.rmdir(dirname)
-    except Exception, le:
-        # Ignore "No such file or directory"
-        if (not isinstance(le, OSError)) or le.args[0] != 2:
+    except EnvironmentError, le:
+        # Ignore "No such file or directory", collect any other exception.
+        if (le.args[0] != 2 and le.args[0] != 3) or (le.args[0] != errno.ENOENT):
             excs.append(le)
+    except Exception, le:
+        excs.append(le)
 
     # Okay, now we've recursively removed everything, ignoring any "No
     # such file or directory" errors, and collecting any other errors.
@@ -217,13 +219,33 @@ def rm_dir(dirname):
             raise OSError, "Failed to remove dir for unknown reason."
         raise OSError, excs
 
-
 def remove_if_possible(f):
     try:
         remove(f)
     except:
         pass
 
+def rmdir_if_empty(path):
+    """ Remove the directory if it is empty. """
+    try:
+        os.rmdir(path)
+    except OSError, e:
+        if e.errno != errno.ENOTEMPTY:
+            raise
+
+
+ASCII = re.compile(r'^[\x00-\x7F]*$')
+
+def listdir(path, filter=ASCII):
+    try:
+        children = os.listdir(path)
+    except OSError, e:
+        if e.errno != errno.ENOENT:
+            raise
+        return []
+    else:
+        return [str(child) for child in children if filter.match(child)]
+
 def open_or_create(fname, binarymode=True):
     try:
         return open(fname, binarymode and "r+b" or "r+")
@@ -255,8 +277,8 @@ def write_atomically(target, contents, mode="b"):
         f.close()
     move_into_place(target+".tmp", target)
 
-def write(path, data, mode="wb"):
-    wf = open(path, mode)
+def write(path, data, mode="b"):
+    wf = open(path, "w"+mode)
     try:
         wf.write(data)
     finally:
@@ -453,8 +475,8 @@ def get_used_space(path):
         # [in] 512-byte units." It is also defined that way on MacOS X. Python does
         # not set the attribute on Windows.
         #
-        # We consider platforms that define st_blocks but give it a wrong value, or
-        # measure it in a unit other than 512 bytes, to be broken. See also
+        # This code relies on the underlying platform to either define st_blocks in
+        # units of 512 bytes or else leave st_blocks undefined. See also
         # <http://bugs.python.org/issue12350>.
 
         if hasattr(s, 'st_blocks'):