diff options
author | Matthias Radestock <matthias@lshift.net> | 2010-04-12 15:35:06 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@lshift.net> | 2010-04-12 15:35:06 +0100 |
commit | 2f924a13cf91eeb612f71e360bad9ea2ef3afed9 (patch) | |
tree | a0c895509d28ce4be5e6c0ee686ba1a33ab9679f | |
parent | 9ac45d82ccfab87e0d15da8b59e791372604e9c9 (diff) | |
download | rabbitmq-server-2f924a13cf91eeb612f71e360bad9ea2ef3afed9.tar.gz |
introduce rabbit_misc:recursive_delete/1 helper
-rw-r--r-- | src/rabbit_misc.erl | 38 | ||||
-rw-r--r-- | src/rabbit_mnesia.erl | 5 |
2 files changed, 39 insertions, 4 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 32f2c791..028b0d73 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -59,7 +59,7 @@ -export([sort_field_table/1]). -export([pid_to_string/1, string_to_pid/1]). -export([version_compare/2, version_compare/3]). --export([dict_cons/3, unlink_and_capture_exit/1]). +-export([recursive_delete/1, dict_cons/3, unlink_and_capture_exit/1]). -import(mnesia). -import(lists). @@ -137,6 +137,8 @@ -spec(version_compare/2 :: (string(), string()) -> 'lt' | 'eq' | 'gt'). -spec(version_compare/3 :: (string(), string(), ('lt' | 'lte' | 'eq' | 'gte' | 'gt')) -> boolean()). +-spec(recursive_delete/1 :: ([file_path()]) -> + 'ok' | {'error', {file_path(), any()}}). -spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). -spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok'). @@ -608,6 +610,40 @@ version_compare(A, B) -> ANum > BNum -> gt end. +recursive_delete(Files) -> + lists:foldl(fun (Path, ok ) -> recursive_delete1(Path); + (_Path, {error, _Err} = Error) -> Error + end, ok, Files). + +recursive_delete1(Path) -> + case filelib:is_dir(Path) of + false -> case file:delete(Path) of + ok -> ok; + {error, enoent} -> ok; %% Path doesn't exist anyway + {error, Err} -> {error, {Path, Err}} + end; + true -> case file:list_dir(Path) of + {ok, FileNames} -> + case lists:foldl( + fun (FileName, ok) -> + recursive_delete1( + filename:join(Path, FileName)); + (_FileName, Error) -> + Error + end, ok, FileNames) of + ok -> + case file:del_dir(Path) of + ok -> ok; + {error, Err} -> {error, {Path, Err}} + end; + {error, _Err} = Error -> + Error + end; + {error, Err} -> + {error, {Path, Err}} + end + end. + dict_cons(Key, Value, Dict) -> dict:update(Key, fun (List) -> [Value | List] end, [Value], Dict). diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index f6f59391..55a6761d 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -424,9 +424,8 @@ reset(Force) -> cannot_delete_schema) end, ok = delete_cluster_nodes_config(), - %% remove persistet messages and any other garbage we find - lists:foreach(fun file:delete/1, - filelib:wildcard(dir() ++ "/*")), + %% remove persisted messages and any other garbage we find + ok = rabbit_misc:recursive_delete(filelib:wildcard(dir() ++ "/*")), ok. leave_cluster([], _) -> ok; |