|
|
@ -12,20 +12,34 @@ |
|
|
|
atom() | {atom(), atom()} | string(), |
|
|
|
[providers:t()], rebar_app_info:t(), rebar_state:t()) -> rebar_app_info:t(). |
|
|
|
run_all_hooks(Dir, Type, Command, Providers, AppInfo, State) -> |
|
|
|
?DEBUG("Running hooks for ~p in app ~ts (~ts) with configuration:", |
|
|
|
[Command, rebar_app_info:name(AppInfo), Dir]), |
|
|
|
State1 = rebar_state:current_app(State, AppInfo), |
|
|
|
State2 = run_provider_hooks(Dir, Type, Command, Providers, rebar_app_info:opts(AppInfo), State1), |
|
|
|
run_hooks(Dir, Type, Command, rebar_app_info:opts(AppInfo), State1), |
|
|
|
rebar_state:current_app(State2). |
|
|
|
|
|
|
|
run_all_hooks(Dir, Type, Command, Providers, State) -> |
|
|
|
?DEBUG("Running hooks for ~p with configuration:", [Command]), |
|
|
|
run_provider_hooks(Dir, Type, Command, Providers, rebar_state:opts(State), State), |
|
|
|
run_hooks(Dir, Type, Command, rebar_state:opts(State), State). |
|
|
|
|
|
|
|
run_project_and_app_hooks(Dir, Type, Command, Providers, State) -> |
|
|
|
ProjectApps = rebar_state:project_apps(State), |
|
|
|
?DEBUG("Running app-specific hooks", []), |
|
|
|
[rebar_hooks:run_all_hooks(Dir, Type, Command, Providers, AppInfo, State) || AppInfo <- ProjectApps], |
|
|
|
?DEBUG("Running project-wide hooks", []), |
|
|
|
run_all_hooks(Dir, Type, Command, Providers, State). |
|
|
|
|
|
|
|
format_error({bad_provider, Type, Command, {Name, Namespace}}) -> |
|
|
|
io_lib:format("Unable to run ~ts hooks for '~p', command '~p' in namespace '~p' not found.", [Type, Command, Namespace, Name]); |
|
|
|
format_error({bad_provider, Type, Command, Name}) -> |
|
|
|
io_lib:format("Unable to run ~ts hooks for '~p', command '~p' not found.", [Type, Command, Name]). |
|
|
|
|
|
|
|
%%%%%%%%%%%%%%% |
|
|
|
%%% PRIVATE %%% |
|
|
|
%%%%%%%%%%%%%%% |
|
|
|
|
|
|
|
run_provider_hooks(Dir, Type, Command, Providers, Opts, State) -> |
|
|
|
case rebar_opts:get(Opts, provider_hooks, []) of |
|
|
|
[] -> |
|
|
@ -40,11 +54,14 @@ run_provider_hooks_(_Dir, _Type, _Command, _Providers, [], State) -> |
|
|
|
run_provider_hooks_(Dir, Type, Command, Providers, TypeHooks, State) -> |
|
|
|
case proplists:get_all_values(Command, TypeHooks) of |
|
|
|
[] -> |
|
|
|
?DEBUG("\t{provider_hooks, []}.", []), |
|
|
|
State; |
|
|
|
HookProviders -> |
|
|
|
rebar_paths:set_paths([plugins], State), |
|
|
|
Providers1 = rebar_state:providers(State), |
|
|
|
State1 = rebar_state:providers(rebar_state:dir(State, Dir), Providers++Providers1), |
|
|
|
?DEBUG("\t{provider_hooks, [{~p, ~p}]}.", |
|
|
|
[Type, HookProviders]), |
|
|
|
case rebar_core:do(HookProviders, State1) of |
|
|
|
{error, ProviderName} -> |
|
|
|
?DEBUG(format_error({bad_provider, Type, Command, ProviderName}), []), |
|
|
@ -55,11 +72,6 @@ run_provider_hooks_(Dir, Type, Command, Providers, TypeHooks, State) -> |
|
|
|
end |
|
|
|
end. |
|
|
|
|
|
|
|
format_error({bad_provider, Type, Command, {Name, Namespace}}) -> |
|
|
|
io_lib:format("Unable to run ~ts hooks for '~p', command '~p' in namespace '~p' not found.", [Type, Command, Namespace, Name]); |
|
|
|
format_error({bad_provider, Type, Command, Name}) -> |
|
|
|
io_lib:format("Unable to run ~ts hooks for '~p', command '~p' not found.", [Type, Command, Name]). |
|
|
|
|
|
|
|
run_hooks(Dir, pre, Command, Opts, State) -> |
|
|
|
run_hooks(Dir, pre_hooks, Command, Opts, State); |
|
|
|
run_hooks(Dir, post, Command, Opts, State) -> |
|
|
@ -67,17 +79,21 @@ run_hooks(Dir, post, Command, Opts, State) -> |
|
|
|
run_hooks(Dir, Type, Command, Opts, State) -> |
|
|
|
case rebar_opts:get(Opts, Type, []) of |
|
|
|
[] -> |
|
|
|
?DEBUG("run_hooks(~p, ~p, ~p) -> no hooks defined\n", [Dir, Type, Command]), |
|
|
|
?DEBUG("\t{~p, []}.", [Type]), |
|
|
|
?DIAGNOSTIC("run_hooks(~p, ~p, ~p) -> no hooks defined\n", [Dir, Type, Command]), |
|
|
|
ok; |
|
|
|
Hooks -> |
|
|
|
Env = rebar_env:create_env(State, Opts), |
|
|
|
lists:foreach(fun({_, C, _}=Hook) when C =:= Command -> |
|
|
|
apply_hook(Dir, Env, Hook); |
|
|
|
({C, _}=Hook) when C =:= Command -> |
|
|
|
apply_hook(Dir, Env, Hook); |
|
|
|
(_) -> |
|
|
|
continue |
|
|
|
end, Hooks) |
|
|
|
CommandHooks = lists:filter( |
|
|
|
fun({_, C, _}) when C =:= Command -> true; |
|
|
|
({C, _}) when C =:= Command -> true; |
|
|
|
(_) -> false |
|
|
|
end, |
|
|
|
Hooks |
|
|
|
), |
|
|
|
?DEBUG("\t{~p, ~p}.", |
|
|
|
[Type, CommandHooks]), |
|
|
|
lists:foreach(fun(Hook) -> apply_hook(Dir, Env, Hook) end, CommandHooks) |
|
|
|
end. |
|
|
|
|
|
|
|
apply_hook(Dir, Env, {Arch, Command, Hook}) -> |
|
|
|