util.datamanager: Ignore errors if the file is gone after removing it
authorKim Alvefur <zash@zash.se>
Sun, 26 Aug 2012 18:53:40 +0000 (20:53 +0200)
committerKim Alvefur <zash@zash.se>
Sun, 26 Aug 2012 18:53:40 +0000 (20:53 +0200)
util/datamanager.lua

index b745cd390949932aa20d3ba8b00118152caf03ab..17c614edd8bb0cb5398d1189cb5d0615ddc54c5a 100644 (file)
@@ -309,6 +309,14 @@ function list_stores(username, host)
        return list;
 end
 
+local function do_remove(path)
+       local ok, err = os_remove(path);
+       if not ok and lfs.attributes(path, "mode") then
+               return ok, err;
+       end
+       return true
+end
+
 function purge(username, host)
        local host_dir = format("%s/%s/", data_path, encode(host));
        local deleted = 0;
@@ -316,10 +324,11 @@ function purge(username, host)
        for file in lfs.dir(host_dir) do
                if lfs.attributes(host_dir..file, "mode") == "directory" then
                        local store = decode(file);
-                       local ok, err = os_remove(getpath(username, host, store));
-                       if not ok and not err:lower():match("no such") then errs[#errs+1] = err; end
-                       local ok, err = os_remove(getpath(username, host, store, "list"));
-                       if not ok and not err:lower():match("no such") then errs[#errs+1] = err; end
+                       local ok, err = do_remove(getpath(username, host, store));
+                       if not ok then errs[#errs+1] = err; end
+
+                       local ok, err = do_remove(getpath(username, host, store, "list"));
+                       if not ok then errs[#errs+1] = err; end
                end
        end
        return #errs == 0, t_concat(errs, ", ");