diff --git a/src/rebar_prv_plugins_upgrade.erl b/src/rebar_prv_plugins_upgrade.erl index 7b2481535..d2e542698 100644 --- a/src/rebar_prv_plugins_upgrade.erl +++ b/src/rebar_prv_plugins_upgrade.erl @@ -25,16 +25,18 @@ init(State) -> {deps, ?DEPS}, {example, "rebar3 plugins upgrade "}, {short_desc, "Upgrade plugins"}, - {desc, "List or upgrade plugins"}, + {desc, "List or upgrade plugins. Use the -a/--all option to upgrade" + " all plugins."}, {opts, [{plugin, undefined, undefined, string, - "Plugin to upgrade"}]}])), + "Plugin to upgrade"}, + {all, $a, "all", undefined, "Upgrade all plugins."}]}])), {ok, State1}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> - {Args, _} = rebar_state:command_parsed_args(State), - case proplists:get_value(plugin, Args, none) of - none -> + case handle_args(State) of + {false, undefined} -> throw(?PRV_ERROR(no_arg)); + {true, _} -> {_, LocalPluginsNames} = rebar_prv_plugins:list_local_plugins(State), lists:foldl( fun (LocalPluginName, {ok, StateAcc}) -> @@ -42,16 +44,23 @@ do(State) -> end, {ok, State}, LocalPluginsNames); - Plugin -> - upgrade(Plugin, State) + {false, Plugin} -> upgrade(Plugin, State) end. -spec format_error(any()) -> iolist(). format_error({not_found, Plugin}) -> io_lib:format("Plugin to upgrade not found: ~ts", [Plugin]); +format_error(no_arg) -> + "Specify a plugin to upgrade, or --all to upgrade them all"; format_error(Reason) -> io_lib:format("~p", [Reason]). +handle_args(State) -> + {Args, _} = rebar_state:command_parsed_args(State), + All = proplists:get_value(all, Args, false), + Plugin = proplists:get_value(plugin, Args), + {All, Plugin}. + upgrade(Plugin, State) -> Profiles = rebar_state:current_profiles(State), case find_plugin(Plugin, Profiles, State) of diff --git a/test/rebar_plugins_SUITE.erl b/test/rebar_plugins_SUITE.erl index 9167e086a..fdb9e5ef6 100644 --- a/test/rebar_plugins_SUITE.erl +++ b/test/rebar_plugins_SUITE.erl @@ -12,6 +12,7 @@ list/1, upgrade/1, upgrade_project_plugin/1, + upgrade_no_args/1, sub_app_plugins/1, sub_app_plugin_overrides/1, project_plugins/1, @@ -220,7 +221,7 @@ upgrade(Config) -> ), rebar_test_utils:run_and_check( - Config, RConf, ["plugins", "upgrade"], + Config, RConf, ["plugins", "upgrade", "--all"], {ok, [{app, Name, valid}, {file, PluginBeam}, {plugin, PkgName}]} ). @@ -263,6 +264,13 @@ upgrade_project_plugin(Config) -> {ok, [{app, Name}, {plugin, PkgName, <<"0.1.3">>}]} ). +upgrade_no_args(Config) -> + try rebar_test_utils:run_and_check(Config, [], ["plugins", "upgrade"], return) + catch {error, {rebar_prv_plugins_upgrade, no_arg}} -> + ok + end, + ok. + sub_app_plugins(Config) -> AppDir = ?config(apps, Config),