Skip to content

Commit 123dd80

Browse files
authored
Merge pull request #2641 from joshrotenberg/plugins-upgrade-all
Support for all argument in upgrade plugin
2 parents 3500884 + 8ddc69d commit 123dd80

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

Diff for: src/rebar_prv_plugins_upgrade.erl

+16-7
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,42 @@ init(State) ->
2525
{deps, ?DEPS},
2626
{example, "rebar3 plugins upgrade <plugin>"},
2727
{short_desc, "Upgrade plugins"},
28-
{desc, "List or upgrade plugins"},
28+
{desc, "List or upgrade plugins. Use the -a/--all option to upgrade"
29+
" all plugins."},
2930
{opts, [{plugin, undefined, undefined, string,
30-
"Plugin to upgrade"}]}])),
31+
"Plugin to upgrade"},
32+
{all, $a, "all", undefined, "Upgrade all plugins."}]}])),
3133
{ok, State1}.
3234

3335
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
3436
do(State) ->
35-
{Args, _} = rebar_state:command_parsed_args(State),
36-
case proplists:get_value(plugin, Args, none) of
37-
none ->
37+
case handle_args(State) of
38+
{false, undefined} -> throw(?PRV_ERROR(no_arg));
39+
{true, _} ->
3840
{_, LocalPluginsNames} = rebar_prv_plugins:list_local_plugins(State),
3941
lists:foldl(
4042
fun (LocalPluginName, {ok, StateAcc}) ->
4143
upgrade(atom_to_list(LocalPluginName), StateAcc)
4244
end,
4345
{ok, State},
4446
LocalPluginsNames);
45-
Plugin ->
46-
upgrade(Plugin, State)
47+
{false, Plugin} -> upgrade(Plugin, State)
4748
end.
4849

4950
-spec format_error(any()) -> iolist().
5051
format_error({not_found, Plugin}) ->
5152
io_lib:format("Plugin to upgrade not found: ~ts", [Plugin]);
53+
format_error(no_arg) ->
54+
"Specify a plugin to upgrade, or --all to upgrade them all";
5255
format_error(Reason) ->
5356
io_lib:format("~p", [Reason]).
5457

58+
handle_args(State) ->
59+
{Args, _} = rebar_state:command_parsed_args(State),
60+
All = proplists:get_value(all, Args, false),
61+
Plugin = proplists:get_value(plugin, Args),
62+
{All, Plugin}.
63+
5564
upgrade(Plugin, State) ->
5665
Profiles = rebar_state:current_profiles(State),
5766
case find_plugin(Plugin, Profiles, State) of

Diff for: test/rebar_plugins_SUITE.erl

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
list/1,
1313
upgrade/1,
1414
upgrade_project_plugin/1,
15+
upgrade_no_args/1,
1516
sub_app_plugins/1,
1617
sub_app_plugin_overrides/1,
1718
project_plugins/1,
@@ -220,7 +221,7 @@ upgrade(Config) ->
220221
),
221222

222223
rebar_test_utils:run_and_check(
223-
Config, RConf, ["plugins", "upgrade"],
224+
Config, RConf, ["plugins", "upgrade", "--all"],
224225
{ok, [{app, Name, valid}, {file, PluginBeam}, {plugin, PkgName}]}
225226
).
226227

@@ -263,6 +264,13 @@ upgrade_project_plugin(Config) ->
263264
{ok, [{app, Name}, {plugin, PkgName, <<"0.1.3">>}]}
264265
).
265266

267+
upgrade_no_args(Config) ->
268+
try rebar_test_utils:run_and_check(Config, [], ["plugins", "upgrade"], return)
269+
catch {error, {rebar_prv_plugins_upgrade, no_arg}} ->
270+
ok
271+
end,
272+
ok.
273+
266274
sub_app_plugins(Config) ->
267275
AppDir = ?config(apps, Config),
268276

0 commit comments

Comments
 (0)