summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-09-09 15:54:02 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-09-09 15:54:02 +0100
commitd57b01da24620440b533749c8c713b319aeb37ca (patch)
tree51203ae81f5286c18cf95a0b2cf793267efaa8cb
parent5769e15bcdfaabb675d1648640de3a416f0bd053 (diff)
downloadrabbitmq-server-git-d57b01da24620440b533749c8c713b319aeb37ca.tar.gz
list packages showing which are enabled and which are available
-rw-r--r--src/rabbit_plugin.erl27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/rabbit_plugin.erl b/src/rabbit_plugin.erl
index d5539912ef..31af1748aa 100644
--- a/src/rabbit_plugin.erl
+++ b/src/rabbit_plugin.erl
@@ -77,11 +77,11 @@ usage() ->
%%----------------------------------------------------------------------------
action(list, [], _Opts, PluginsDir, PluginsDistDir) ->
- io:format("All plugins: ~p~n", [find_available_plugins(PluginsDistDir)]).
+ format_plugins(find_plugins(PluginsDir), find_plugins(PluginsDistDir)).
%%----------------------------------------------------------------------------
-find_available_plugins(PluginsDistDir) ->
+find_plugins(PluginsDistDir) ->
EZs = filelib:wildcard("*.ez", PluginsDistDir),
{Plugins, Problems} =
lists:foldl(fun ({error, EZ, Reason}, {Plugins1, Problems1}) ->
@@ -100,7 +100,7 @@ find_available_plugins(PluginsDistDir) ->
get_plugin_info(EZ) ->
case read_app_file(EZ) of
{application, Name, Props} ->
- Version = proplists:get_value(vsn, Props),
+ Version = proplists:get_value(vsn, Props, "0"),
Description = proplists:get_value(description, Props, ""),
Dependencies = proplists:get_value(applications, Props, []),
#plugin{name = Name, version = Version, description = Description,
@@ -140,3 +140,24 @@ parse_binary(Bin) ->
catch
Err -> {error, {invalid_app, Err}}
end.
+
+format_plugins(Enabled, Available) ->
+ EnabledSet = sets:from_list([Name || #plugin{name = Name} <- Enabled]),
+ [case sets:is_element(Name, EnabledSet) of
+ false -> format_available_plugin(Plugin);
+ true -> format_enabled_plugin(Plugin)
+ end
+ || Plugin = #plugin{name = Name} <- lists:usort(fun plugins_cmp/2,
+ Enabled ++ Available)],
+ ok.
+
+format_available_plugin(#plugin{name = Name, version = Version,
+ description = Description}) ->
+ io:format("[N] ~w-~s: ~s~n", [Name, Version, Description]).
+
+format_enabled_plugin(#plugin{name = Name, version = Version,
+ description = Description}) ->
+ io:format("[E] ~w-~s: ~s~n", [Name, Version, Description]).
+
+plugins_cmp(#plugin{name = N1, version = V1}, #plugin{name = N2, version = V2}) ->
+ {N1, V1} =< {N2, V2}.