summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-09-14 00:18:35 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-09-14 00:18:35 +0100
commitd45cde666ea4f6da1bf97b4acd9c1067c22974cc (patch)
tree7eacd5f1ec3186f98ad62a73b7f2f585fcdea642
parent7dc2d7adc16192fa1a86289ec90efbaf79aeb85a (diff)
downloadrabbitmq-server-git-d45cde666ea4f6da1bf97b4acd9c1067c22974cc.tar.gz
don't look for plugins in the plugins/ directory
-rw-r--r--src/rabbit_plugin.erl28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/rabbit_plugin.erl b/src/rabbit_plugin.erl
index f0054da5b5..8503268ee7 100644
--- a/src/rabbit_plugin.erl
+++ b/src/rabbit_plugin.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is VMware, Inc.
-%% Copyright (c) 2007-2011 VMware, Inc. All rights reserved.
+%% Copyright (c) 2011 VMware, Inc. All rights reserved.
%%
-module(rabbit_plugin).
@@ -80,8 +80,7 @@ action(list, [], _Opts, PluginsDir, PluginsDistDir) ->
format_plugins(find_plugins(PluginsDir), find_plugins(PluginsDistDir));
action(enable, ToEnable, _Opts, PluginsDir, PluginsDistDir) ->
- AllPlugins = usort_plugins(find_plugins(PluginsDistDir) ++
- find_plugins(PluginsDir)),
+ AllPlugins = find_plugins(PluginsDistDir),
ToEnable1 = [list_to_atom(Name) || Name <- ToEnable],
{Found, Missing} = lists:foldl(fun (#plugin{name = Name}, {Fs, Ms}) ->
case lists:member(Name, Ms) of
@@ -115,7 +114,8 @@ action(enable, ToEnable, _Opts, PluginsDir, PluginsDistDir) ->
rabbit_misc:quit(2)
end
end, ok, EnableOrderPlugins),
- update_enabled_plugins(Found).
+ InstalledPlugins = read_enabled_plugins(),
+ update_enabled_plugins(merge_plugin_lists(InstalledPlugins, ToEnable)).
%%----------------------------------------------------------------------------
@@ -201,6 +201,21 @@ format_enabled_plugin(#plugin{name = Name, version = Version,
usort_plugins(Plugins) ->
lists:usort(fun plugins_cmp/2, Plugins).
+%% Merge two plugin lists. In case of duplicates, only keep highest
+%% version.
+merge_plugin_lists(Ps1, Ps2) ->
+ filter_duplicates(usort_plugins(Ps1 ++ Ps2)).
+
+filter_duplicates([P1 = #plugin{name = N, version = V1},
+ P2 = #plugin{name = N, version = V2} | Ps]) ->
+ if V1 < V2 -> [P2 | filter_duplicates(Ps)];
+ true -> [P1 | filter_duplicates(Ps)]
+ end;
+filter_duplicates([P | Ps]) ->
+ [P | filter_duplicates(Ps)];
+filter_duplicates(Ps) ->
+ Ps.
+
plugins_cmp(#plugin{name = N1, version = V1}, #plugin{name = N2, version = V2}) ->
{N1, V1} =< {N2, V2}.
@@ -214,5 +229,10 @@ filter_applications(Applications) ->
_ -> true
end].
+%% Read the enabled plugin names from disk.
+read_enabled_plugins() ->
+ [].
+
+%% Update the enabled plugin names on disk.
update_enabled_plugins(NewPlugins) ->
io:format("Adding ~p to enabled plugins~n", [NewPlugins]).