Sfoglia il codice sorgente

support for provider_hooks in config

pull/115/head
Tristan Sloughter 10 anni fa
parent
commit
37b79ff2b7
4 ha cambiato i file con 51 aggiunte e 31 eliminazioni
  1. +1
    -1
      rebar.config
  2. +12
    -11
      src/rebar_core.erl
  3. +1
    -0
      src/rebar_prv_erlydtl_compiler.erl
  4. +37
    -19
      src/rebar_state.erl

+ 1
- 1
rebar.config Vedi File

@ -24,7 +24,7 @@
{branch, "master"}}},
{providers, "",
{git, "https://github.com/tsloughter/providers.git",
{branch, "profiles"}}},
{branch, "hooks"}}},
{erlydtl, ".*",
{git, "https://github.com/erlydtl/erlydtl.git",
{tag, "0.9.4"}}},

+ 12
- 11
src/rebar_core.erl Vedi File

@ -37,17 +37,18 @@ process_command(State, Command) ->
Providers = rebar_state:providers(State),
Namespace = rebar_state:namespace(State),
{TargetProviders, CommandProvider} =
case Namespace of
undefined ->
%% undefined namespace means 'default', but on the first run;
%% it is used as an implicit counter for the first vs. subsequent
%% runs.
{providers:get_target_providers(Command, Providers, default),
providers:get_provider(Command, Providers, default)};
_ ->
{providers:get_target_providers(Command, Providers, Namespace),
providers:get_provider(Command, Providers, Namespace)}
end,
case Namespace of
undefined ->
%% undefined namespace means 'default', but on the first run;
%% it is used as an implicit counter for the first vs. subsequent
%% runs.
{providers:get_target_providers(Command, Providers, default),
providers:get_provider(Command, Providers, default)};
_ ->
{providers:get_target_providers(Command, Providers, Namespace),
providers:get_provider(Command, Providers, Namespace)}
end,
case CommandProvider of
not_found ->
case Namespace of

+ 1
- 0
src/rebar_prv_erlydtl_compiler.erl Vedi File

@ -126,6 +126,7 @@ init(State) ->
{ok, State1}.
do(Config) ->
?INFO("Running erlydtl...", []),
MultiDtlOpts = erlydtl_opts(Config),
Result = lists:foldl(fun(DtlOpts, _) ->

+ 37
- 19
src/rebar_state.erl Vedi File

@ -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).
State1 = try
lists:foldl(fun(ProviderMod, StateAcc) ->
case providers:new(ProviderMod, StateAcc) of
{error, Reason} ->
?ERROR(Reason++"~n", []),
StateAcc;
{ok, StateAcc1} ->
StateAcc1
end
end, State0, ProviderModules)
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(State1).
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),

Caricamento…
Annulla
Salva