307 end |
307 end |
308 end |
308 end |
309 return list; |
309 return list; |
310 end |
310 end |
311 |
311 |
|
312 local function do_remove(path) |
|
313 local ok, err = os_remove(path); |
|
314 if not ok and lfs.attributes(path, "mode") then |
|
315 return ok, err; |
|
316 end |
|
317 return true |
|
318 end |
|
319 |
312 function purge(username, host) |
320 function purge(username, host) |
313 local host_dir = format("%s/%s/", data_path, encode(host)); |
321 local host_dir = format("%s/%s/", data_path, encode(host)); |
314 local deleted = 0; |
322 local deleted = 0; |
315 local errs = {}; |
323 local errs = {}; |
316 for file in lfs.dir(host_dir) do |
324 for file in lfs.dir(host_dir) do |
317 if lfs.attributes(host_dir..file, "mode") == "directory" then |
325 if lfs.attributes(host_dir..file, "mode") == "directory" then |
318 local store = decode(file); |
326 local store = decode(file); |
319 local ok, err = os_remove(getpath(username, host, store)); |
327 local ok, err = do_remove(getpath(username, host, store)); |
320 if not ok and not err:lower():match("no such") then errs[#errs+1] = err; end |
328 if not ok then errs[#errs+1] = err; end |
321 local ok, err = os_remove(getpath(username, host, store, "list")); |
329 |
322 if not ok and not err:lower():match("no such") then errs[#errs+1] = err; end |
330 local ok, err = do_remove(getpath(username, host, store, "list")); |
|
331 if not ok then errs[#errs+1] = err; end |
323 end |
332 end |
324 end |
333 end |
325 return #errs == 0, t_concat(errs, ", "); |
334 return #errs == 0, t_concat(errs, ", "); |
326 end |
335 end |
327 |
336 |