summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArnaud Cogoluègnes <acogoluegnes@gmail.com>2016-12-22 17:09:20 +0100
committerArnaud Cogoluègnes <acogoluegnes@gmail.com>2016-12-22 17:09:20 +0100
commitdc89936ce4b74d322601972abc9b195ee7535a90 (patch)
tree10c1fcbe0e93fc66ea077cd0346c99696def66ca /src
parent0706cf06b09c5c55762ab67ee4c11b28fcf6ee85 (diff)
parentd616cc922dbd73eca7700c50f09e33e6b578b0d9 (diff)
downloadrabbitmq-server-git-dc89936ce4b74d322601972abc9b195ee7535a90.tar.gz
Merge branch 'master' into rabbitmq-server-505
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_plugins.erl36
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).