|
|
@ -30,7 +30,6 @@ |
|
|
|
overrides/1, overrides/2, |
|
|
|
apply_overrides/2, |
|
|
|
|
|
|
|
prepend_hook/3, append_hook/3, hooks/2, |
|
|
|
providers/1, providers/2, add_provider/2]). |
|
|
|
|
|
|
|
-include("rebar.hrl"). |
|
|
@ -279,15 +278,43 @@ add_provider(State=#state_t{providers=Providers}, Provider) -> |
|
|
|
State#state_t{providers=[Provider | Providers]}. |
|
|
|
|
|
|
|
create_logic_providers(ProviderModules, State0) -> |
|
|
|
lists:foldl(fun(ProviderMod, Acc) -> |
|
|
|
case providers:new(ProviderMod, Acc) of |
|
|
|
{error, Reason} -> |
|
|
|
?ERROR(Reason++"~n", []), |
|
|
|
Acc; |
|
|
|
{ok, State1} -> |
|
|
|
State1 |
|
|
|
end |
|
|
|
end, State0, ProviderModules). |
|
|
|
try |
|
|
|
State1 = lists:foldl(fun(ProviderMod, StateAcc) -> |
|
|
|
case providers:new(ProviderMod, StateAcc) of |
|
|
|
{error, Reason} -> |
|
|
|
?ERROR(Reason++"~n", []), |
|
|
|
StateAcc; |
|
|
|
{ok, StateAcc1} -> |
|
|
|
StateAcc1 |
|
|
|
end |
|
|
|
end, State0, ProviderModules), |
|
|
|
apply_hooks(State1) |
|
|
|
catch |
|
|
|
C:T -> |
|
|
|
?DEBUG("~p: ~p ~p", [C, T, erlang:get_stacktrace()]), |
|
|
|
throw({error, "Failed creating providers. Run with DEBUG=1 for stacktrace."}) |
|
|
|
end. |
|
|
|
|
|
|
|
apply_hooks(State0) -> |
|
|
|
try |
|
|
|
Hooks = rebar_state:get(State0, provider_hooks, []), |
|
|
|
PreHooks = proplists:get_value(pre, Hooks, []), |
|
|
|
PostHooks = proplists:get_value(post, Hooks, []), |
|
|
|
State1 = lists:foldl(fun({Target, Hook}, StateAcc) -> |
|
|
|
prepend_hook(StateAcc, Target, Hook) |
|
|
|
end, State0, PreHooks), |
|
|
|
lists:foldl(fun({Target, Hook}, StateAcc) -> |
|
|
|
append_hook(StateAcc, Target, Hook) |
|
|
|
end, State1, PostHooks) |
|
|
|
catch |
|
|
|
C:T -> |
|
|
|
?DEBUG("~p: ~p ~p", [C, T, erlang:get_stacktrace()]), |
|
|
|
throw({error, "Failed parsing provider hooks. Run with DEBUG=1 for stacktrace."}) |
|
|
|
end. |
|
|
|
|
|
|
|
%% =================================================================== |
|
|
|
%% Internal functions |
|
|
|
%% =================================================================== |
|
|
|
|
|
|
|
prepend_hook(State=#state_t{providers=Providers}, Target, Hook) -> |
|
|
|
State#state_t{providers=add_hook(pre, Providers, Target, Hook)}. |
|
|
@ -295,15 +322,6 @@ prepend_hook(State=#state_t{providers=Providers}, Target, Hook) -> |
|
|
|
append_hook(State=#state_t{providers=Providers}, Target, Hook) -> |
|
|
|
State#state_t{providers=add_hook(post, Providers, Target, Hook)}. |
|
|
|
|
|
|
|
-spec hooks(t(), atom()) -> {[providers:t()], [providers:t()]}. |
|
|
|
hooks(_State=#state_t{providers=Providers}, Target) -> |
|
|
|
Provider = providers:get_provider(Target, Providers), |
|
|
|
providers:hooks(Provider). |
|
|
|
|
|
|
|
%% =================================================================== |
|
|
|
%% Internal functions |
|
|
|
%% =================================================================== |
|
|
|
|
|
|
|
add_hook(Which, Providers, Target, Hook) -> |
|
|
|
Provider = providers:get_provider(Target, Providers), |
|
|
|
Hooks = providers:hooks(Provider), |
|
|
|