diff options
| author | Matthew Sackman <matthew@lshift.net> | 2010-04-12 13:23:16 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2010-04-12 13:23:16 +0100 |
| commit | 8f353e401feccfff4bbdd8bd552d0d67a76999d0 (patch) | |
| tree | 64358ae3d1626ad2ab89c59c346a864e4e4210a4 /src | |
| parent | 99705adce48e010cdb17916c9b0aa63d5343fcb1 (diff) | |
| download | rabbitmq-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.erl | 31 | ||||
| -rw-r--r-- | src/rabbit_mnesia.erl | 3 | ||||
| -rw-r--r-- | src/rabbit_msg_store.erl | 2 |
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 |
