瀏覽代碼

add support for plugins as pre and post hooks

pull/3/head
Tristan Sloughter 10 年之前
父節點
當前提交
d78f66291f
共有 5 個文件被更改,包括 28 次插入9 次删除
  1. +11
    -1
      src/rebar_provider.erl
  2. +3
    -7
      src/rebar_prv_shell.erl
  3. +0
    -1
      src/rebar_prv_tar.erl
  4. +1
    -0
      src/rebar_prv_version.erl
  5. +13
    -0
      src/rebar_state.erl

+ 11
- 1
src/rebar_provider.erl 查看文件

@ -66,7 +66,17 @@ new(ModuleName, State0) when is_atom(ModuleName) ->
-spec do(Provider::t(), rebar_state:t()) ->
{ok, rebar_state:t()}.
do(Provider, State) ->
(Provider#provider.provider_impl):do(State).
{PreHooks, PostHooks} = rebar_state:hooks(State, Provider#provider.name),
{ok, State1} = run_hook_plugins(PreHooks, State),
{ok, State2} = (Provider#provider.provider_impl):do(State1),
run_hook_plugins(PostHooks, State2).
run_hook_plugins(Hooks, State) ->
State1 = lists:foldl(fun(Hook, StateAcc) ->
{ok, StateAcc1} = rebar_provider:do(Hook, StateAcc),
StateAcc1
end, State, Hooks),
{ok, State1}.
%%% @doc get the name of the module that implements the provider
%%% @param Provider the provider object

+ 3
- 7
src/rebar_prv_shell.erl 查看文件

@ -50,7 +50,7 @@ init(State) ->
deps = ?DEPS,
example = "rebar shell",
short_desc = "Run shell with project apps and deps in path.",
desc = "",
desc = info(),
opts = []}),
{ok, State1}.
@ -91,12 +91,8 @@ shell() ->
%% this call never returns (until user quits shell)
timer:sleep(infinity).
info(help, shell) ->
?CONSOLE(
"Start a shell with project and deps preloaded similar to~n"
"'erl -pa ebin -pa deps/*/ebin'.~n",
[]
).
info() ->
"Start a shell with project and deps preloaded similar to~n'erl -pa ebin -pa deps/*/ebin'.~n".
remove_error_handler(0) ->
?WARN("Unable to remove simple error_logger handler~n", []);

+ 0
- 1
src/rebar_prv_tar.erl 查看文件

@ -31,6 +31,5 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | relx:error().
do(Config) ->
RelxConfig = rebar_state:get_local(Config, relx, []),
relx:main("release tar"),
{ok, Config}.

+ 1
- 0
src/rebar_prv_version.erl 查看文件

@ -27,6 +27,7 @@ init(State) ->
short_desc = "Print version for rebar and current Erlang.",
desc = "",
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | relx:error().

+ 13
- 0
src/rebar_state.erl 查看文件

@ -14,6 +14,7 @@
binary_deps/1, binary_deps/2,
src_deps/1, src_deps/2,
prepend_hook/3, append_hook/3, hooks/2,
providers/1, providers/2, add_provider/2]).
-include("rebar.hrl").
@ -39,6 +40,7 @@
project_apps = ordsets:new() :: ordsets:ordset(rebar_app_info:t()),
providers = [],
hooks = [],
skip_dirs = new_skip_dirs() :: rebar_dict() }).
-export_type([t/0]).
@ -160,6 +162,17 @@ create_logic_providers(ProviderModules, State0) ->
State1
end, State0, ProviderModules).
prepend_hook(State=#state_t{hooks=Hooks}, Target, Hook) ->
{PreHooks, PostHooks} = proplists:get_value(Target, Hooks, {[], []}),
State#state_t{hooks=[{Target, {[Hook | PreHooks], PostHooks}} | proplists:delete(Target, Hooks)]}.
append_hook(State=#state_t{hooks=Hooks}, Target, Hook) ->
{PreHooks, PostHooks} = proplists:get_value(Target, Hooks, {[], []}),
State#state_t{hooks=[{Target, {PreHooks, [Hook | PostHooks]}} | proplists:delete(Target, Hooks)]}.
hooks(#state_t{hooks=Hooks}, Target) ->
proplists:get_value(Target, Hooks, {[], []}).
%% ===================================================================
%% Internal functions
%% ===================================================================

Loading…
取消
儲存