Diff

util/datamanager.lua @ 5095:dddbcd62183a

util.datamanager: Collect errors when deleting all stores of a user, but ignore "no such file"
author Kim Alvefur <zash@zash.se>
date Sat, 25 Aug 2012 01:21:41 +0200
parent 5069:7b298f8bcbcb
child 5103:5a1488369c35
line wrap: on
line diff
--- a/util/datamanager.lua	Sat Aug 25 01:20:13 2012 +0200
+++ b/util/datamanager.lua	Sat Aug 25 01:21:41 2012 +0200
@@ -312,15 +312,17 @@
 function purge(username, host)
 	local host_dir = format("%s/%s/", data_path, encode(host));
 	local deleted = 0;
+	local errs = {};
 	for file in lfs.dir(host_dir) do
 		if lfs.attributes(host_dir..file, "mode") == "directory" then
 			local store = decode(file);
-			deleted = deleted + (os_remove(getpath(username, host, store)) and 1 or 0);
-			deleted = deleted + (os_remove(getpath(username, host, store, "list")) and 1 or 0);
-			-- We this will generate loads of "No such file or directory", but do we care?
+			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
 		end
 	end
-	return deleted > 0, deleted;
+	return #errs == 0, t_concat(errs, ", ");
 end
 
 return _M;