summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2010-04-12 13:23:16 +0100
committerMatthew Sackman <matthew@lshift.net>2010-04-12 13:23:16 +0100
commit8f353e401feccfff4bbdd8bd552d0d67a76999d0 (patch)
tree64358ae3d1626ad2ab89c59c346a864e4e4210a4 /src
parent99705adce48e010cdb17916c9b0aa63d5343fcb1 (diff)
downloadrabbitmq-server-git-8f353e401feccfff4bbdd8bd552d0d67a76999d0.tar.gz
Fixed recursive delete - it now takes a list of paths, and it deletes directories it comes across
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_misc.erl31
-rw-r--r--src/rabbit_mnesia.erl3
-rw-r--r--src/rabbit_msg_store.erl2
3 files changed, 23 insertions, 13 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl
index 136ca6fdea..c75c48d988 100644
--- a/src/rabbit_misc.erl
+++ b/src/rabbit_misc.erl
@@ -137,7 +137,7 @@
-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 :: (string()) -> 'ok' | {'error', any()}).
+-spec(recursive_delete/1 :: ([string()]) -> 'ok' | {'error', any()}).
-spec(dict_cons/3 :: (any(), any(), dict()) -> dict()).
-spec(unlink_and_capture_exit/1 :: (pid()) -> 'ok').
@@ -609,23 +609,34 @@ version_compare(A, B) ->
ANum > BNum -> gt
end.
-recursive_delete(Path) ->
+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;
+ ok -> ok;
%% Path doesn't exist anyway
- {error, enoent} -> ok
+ {error, enoent} -> ok;
+ {error, _Err} = Error -> Error
end;
true ->
case file:list_dir(Path) of
{ok, FileNames} ->
- lists:foldl(
- fun (FileName, ok) ->
- recursive_delete(filename:join(Path, FileName));
- (_FileName, Error) ->
- Error
- end, ok, FileNames);
+ case lists:foldl(
+ fun (FileName, ok) ->
+ recursive_delete1(
+ filename:join(Path, FileName));
+ (_FileName, Error) ->
+ Error
+ end, ok, FileNames) of
+ ok -> file:del_dir(Path);
+ {error, _Err} = Error -> Error
+ end;
{error, Error} ->
{error, {Path, Error}}
end
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 6ec3cf74b3..e11f27aff0 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -425,8 +425,7 @@ reset(Force) ->
end,
ok = delete_cluster_nodes_config(),
%% remove persistet messages and any other garbage we find
- lists:foreach(fun file:delete/1,
- filelib:wildcard(dir() ++ "/*")),
+ ok = rabbit_misc:recursive_delete(filelib:wildcard(dir() ++ "/*")),
ok.
leave_cluster([], _) -> ok;
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl
index 086f26b818..800b2061dd 100644
--- a/src/rabbit_msg_store.erl
+++ b/src/rabbit_msg_store.erl
@@ -375,7 +375,7 @@ successfully_recovered_state(Server) ->
clean(Server, BaseDir) ->
Dir = filename:join(BaseDir, atom_to_list(Server)),
- ok = rabbit_misc:recursive_delete(Dir).
+ ok = rabbit_misc:recursive_delete([Dir]).
%%----------------------------------------------------------------------------
%% Client-side-only helpers