diff options
| author | Arnaud Cogoluègnes <acogoluegnes@gmail.com> | 2016-12-22 17:09:20 +0100 |
|---|---|---|
| committer | Arnaud Cogoluègnes <acogoluegnes@gmail.com> | 2016-12-22 17:09:20 +0100 |
| commit | dc89936ce4b74d322601972abc9b195ee7535a90 (patch) | |
| tree | 10c1fcbe0e93fc66ea077cd0346c99696def66ca /src | |
| parent | 0706cf06b09c5c55762ab67ee4c11b28fcf6ee85 (diff) | |
| parent | d616cc922dbd73eca7700c50f09e33e6b578b0d9 (diff) | |
| download | rabbitmq-server-git-dc89936ce4b74d322601972abc9b195ee7535a90.tar.gz | |
Merge branch 'master' into rabbitmq-server-505
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_plugins.erl | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/rabbit_plugins.erl b/src/rabbit_plugins.erl index 40dbf91cfd..9da68b7640 100644 --- a/src/rabbit_plugins.erl +++ b/src/rabbit_plugins.erl @@ -140,9 +140,14 @@ active() -> lists:member(App, LoadedPluginNames)]. loaded_plugin_names() -> - {ok, PluginsDir} = application:get_env(rabbit, plugins_dir), - PluginsDirComponents = filename:split(PluginsDir), - loaded_plugin_names(code:get_path(), PluginsDirComponents, []). + {ok, PluginsPath} = application:get_env(rabbit, plugins_dir), + PluginsDirs = split_path(PluginsPath), + lists:flatmap( + fun(PluginsDir) -> + PluginsDirComponents = filename:split(PluginsDir), + loaded_plugin_names(code:get_path(), PluginsDirComponents, []) + end, + PluginsDirs). loaded_plugin_names([Path | OtherPaths], PluginsDirComponents, PluginNames) -> case lists:sublist(filename:split(Path), length(PluginsDirComponents)) of @@ -608,11 +613,7 @@ remove_duplicate_plugins([Plugin|Rest], {Plugins0, Problems0}) -> maybe_keep_required_deps(true, Plugins) -> Plugins; maybe_keep_required_deps(false, Plugins) -> - %% We load the "rabbit" application to be sure we can get the - %% "applications" key. This is required for rabbitmq-plugins for - %% instance. - application:load(rabbit), - {ok, RabbitDeps} = application:get_key(rabbit, applications), + RabbitDeps = list_all_deps([rabbit]), lists:filter(fun (#plugin{name = Name}) -> not lists:member(Name, RabbitDeps); @@ -621,6 +622,25 @@ maybe_keep_required_deps(false, Plugins) -> end, Plugins). +list_all_deps(Applications) -> + list_all_deps(Applications, []). + +list_all_deps([Application | Applications], Deps) -> + %% We load the application to be sure we can get the "applications" key. + %% This is required for rabbitmq-plugins for instance. + application:load(Application), + NewDeps = [Application | Deps], + case application:get_key(Application, applications) of + {ok, ApplicationDeps} -> + RemainingApplications0 = ApplicationDeps ++ Applications, + RemainingApplications = RemainingApplications0 -- NewDeps, + list_all_deps(RemainingApplications, NewDeps); + undefined -> + list_all_deps(Applications, NewDeps) + end; +list_all_deps([], Deps) -> + Deps. + remove_otp_overrideable_plugins(Plugins) -> lists:filter(fun(P) -> not plugin_provided_by_otp(P) end, Plugins). |
