summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rebar_prv_upgrade.erl49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/rebar_prv_upgrade.erl b/src/rebar_prv_upgrade.erl
new file mode 100644
index 0000000..6722948
--- /dev/null
+++ b/src/rebar_prv_upgrade.erl
@@ -0,0 +1,49 @@
+%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
+%% ex: ts=4 sw=4 et
+
+-module(rebar_prv_upgrade).
+
+-behaviour(rebar_provider).
+
+-export([init/1,
+ do/1]).
+
+-include("rebar.hrl").
+
+-define(PROVIDER, upgrade).
+-define(DEPS, [lock]).
+
+%% ===================================================================
+%% Public API
+%% ===================================================================
+
+-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
+init(State) ->
+ State1 = rebar_state:add_provider(State, #provider{name = ?PROVIDER,
+ provider_impl = ?MODULE,
+ bare = false,
+ deps = ?DEPS,
+ example = "rebar upgrade cowboy",
+ short_desc = "Upgrade dependency.",
+ desc = "",
+ opts = []}),
+ {ok, State1}.
+
+-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
+do(State) ->
+ case rebar_state:command_args(State) of
+ [Name] ->
+ ?INFO("Updating ~s~n", [Name]),
+ Locks = rebar_state:get(State, locks, []),
+ case lists:keyfind(ec_cnv:to_binary(Name), 1, Locks) of
+ {_, _, _, Level} ->
+ Deps = rebar_state:get(State, deps),
+ Dep = lists:keyfind(list_to_atom(Name), 1, Deps),
+ rebar_prv_install_deps:handle_deps(State, [Dep], {true, ec_cnv:to_binary(Name), Level}),
+ {ok, State};
+ false ->
+ {error, io_lib:format("No such dependency ~s~n", [Name])}
+ end;
+ [] ->
+ {error, "No package given to upgrade."}
+ end.