diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rebar_prv_plugins_upgrade.erl | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/rebar_prv_plugins_upgrade.erl b/src/rebar_prv_plugins_upgrade.erl index fbd8365..5ccd054 100644 --- a/src/rebar_prv_plugins_upgrade.erl +++ b/src/rebar_prv_plugins_upgrade.erl @@ -33,10 +33,16 @@ init(State) -> -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> {Args, _} = rebar_state:command_parsed_args(State), - Plugin = proplists:get_value(plugin, Args, <<"">>), - upgrade(Plugin, State). + case proplists:get_value(plugin, Args, none) of + none -> + ?PRV_ERROR(no_plugin_arg); + Plugin -> + upgrade(Plugin, State) + end. -spec format_error(any()) -> iolist(). +format_error(no_plugin_arg) -> + io_lib:format("Must give an installed plugin to upgrade as an argument", []); format_error({not_found, Plugin}) -> io_lib:format("Plugin to upgrade not found: ~s", [Plugin]); format_error(Reason) -> @@ -44,15 +50,12 @@ format_error(Reason) -> upgrade(Plugin, State) -> Profiles = rebar_state:current_profiles(State), - Dep = ec_lists:search(fun(Profile) -> - Plugins = rebar_state:get(State, {plugins, Profile}, []), - case find(list_to_atom(Plugin), Plugins) of - false -> - not_found; - P -> - {ok, P} - end - end, Profiles), + case find_plugin(Plugin, Profiles, State) of + not_found -> + Dep = find_plugin(Plugin, [global], State); + Dep -> + Dep + end, case Dep of not_found -> @@ -76,6 +79,17 @@ upgrade(Plugin, State) -> {ok, State} end. +find_plugin(Plugin, Profiles, State) -> + ec_lists:search(fun(Profile) -> + Plugins = rebar_state:get(State, {plugins, Profile}, []), + case find(list_to_atom(Plugin), Plugins) of + false -> + not_found; + P -> + {ok, P} + end + end, Profiles). + find(_Plugin, []) -> false; find(Plugin, [Plugin | _Plugins]) -> |