Skip to content

Commit c102379

Browse files
authored
Merge pull request #2521 from paulo-ferraz-oliveira/feature/rebar3_plugins_upgrade
Have "rebar3 plugins upgrade" work without specifying plugin name
2 parents ab5c342 + 10404ab commit c102379

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

src/rebar_prv_plugins.erl

+18-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
-export([init/1,
66
do/1,
7-
format_error/1]).
7+
format_error/1,
8+
list_local_plugins/1]).
89

910
-include("rebar.hrl").
1011
-include_lib("providers/include/providers.hrl").
@@ -41,22 +42,35 @@ do(State) ->
4142

4243
RebarOpts = rebar_state:opts(State),
4344
SrcDirs = rebar_dir:src_dirs(RebarOpts, ["src"]),
44-
Plugins = rebar_state:get(State, plugins, []),
45-
ProjectPlugins = rebar_state:get(State, project_plugins, []),
45+
{LocalPluginsDefs, _} = list_local_plugins(State),
4646
PluginsDirs = filelib:wildcard(filename:join(rebar_dir:plugins_dir(State), "*")),
4747

4848
%% use `checkouts_dir' and not `checkouts_out_dir'. Since we use `all' in `find_apps'
4949
%% so it doesn't need to be built and the apps in `checkouts_dir' could be old
5050
%% because the user removing from `_checkouts/' doesn't cause removal of the output
5151
CheckoutsDirs = filelib:wildcard(filename:join(rebar_dir:checkouts_dir(State), "*")),
5252
Apps = rebar_app_discover:find_apps(CheckoutsDirs++PluginsDirs, SrcDirs, all, State),
53-
display_plugins("Local plugins", Apps, Plugins ++ ProjectPlugins),
53+
display_plugins("Local plugins", Apps, LocalPluginsDefs),
5454
{ok, State}.
5555

5656
-spec format_error(any()) -> iolist().
5757
format_error(Reason) ->
5858
io_lib:format("~p", [Reason]).
5959

60+
list_local_plugins(State) ->
61+
LocalPluginsDefs = rebar_state:get(State, plugins, [])
62+
++ rebar_state:get(State, project_plugins, []),
63+
LocalPluginsNames = lists:map(
64+
fun (LocalPluginDef) ->
65+
rebar_utils:to_atom(
66+
if is_tuple(LocalPluginDef) -> element(1, LocalPluginDef);
67+
LocalPluginDef -> LocalPluginDef
68+
end
69+
)
70+
end,
71+
LocalPluginsDefs),
72+
{LocalPluginsDefs, LocalPluginsNames}.
73+
6074
display_plugins(_Header, _Apps, []) ->
6175
ok;
6276
display_plugins(Header, Apps, Plugins) ->

src/rebar_prv_plugins_upgrade.erl

+7-3
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,18 @@ do(State) ->
3535
{Args, _} = rebar_state:command_parsed_args(State),
3636
case proplists:get_value(plugin, Args, none) of
3737
none ->
38-
?PRV_ERROR(no_plugin_arg);
38+
{_, LocalPluginsNames} = rebar_prv_plugins:list_local_plugins(State),
39+
lists:foldl(
40+
fun (LocalPluginName, {ok, StateAcc}) ->
41+
upgrade(atom_to_list(LocalPluginName), StateAcc)
42+
end,
43+
{ok, State},
44+
LocalPluginsNames);
3945
Plugin ->
4046
upgrade(Plugin, State)
4147
end.
4248

4349
-spec format_error(any()) -> iolist().
44-
format_error(no_plugin_arg) ->
45-
io_lib:format("Must give an installed plugin to upgrade as an argument", []);
4650
format_error({not_found, Plugin}) ->
4751
io_lib:format("Plugin to upgrade not found: ~ts", [Plugin]);
4852
format_error(Reason) ->

src/rebar_utils.erl

+5
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
deps_to_binary/1,
5959
to_binary/1,
6060
to_list/1,
61+
to_atom/1,
6162
tup_dedup/1,
6263
tup_umerge/2,
6364
tup_sort/1,
@@ -270,6 +271,10 @@ to_list(B) when is_binary(B) -> unicode:characters_to_list(B);
270271
to_list(I) when is_integer(I) -> integer_to_list(I);
271272
to_list(Str) -> unicode:characters_to_list(Str).
272273

274+
to_atom(B) when is_binary(B) -> binary_to_atom(B, utf8);
275+
to_atom(Str) when is_list(Str) -> list_to_atom(Str);
276+
to_atom(A) when is_atom(A) -> A.
277+
273278
tup_dedup(List) ->
274279
tup_dedup_(tup_sort(List)).
275280

0 commit comments

Comments
 (0)