diff options
Diffstat (limited to 'src/rebar_hooks.erl')
-rw-r--r-- | src/rebar_hooks.erl | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/src/rebar_hooks.erl b/src/rebar_hooks.erl index 857336c..bbb916d 100644 --- a/src/rebar_hooks.erl +++ b/src/rebar_hooks.erl @@ -1,6 +1,7 @@ -module(rebar_hooks). -export([run_all_hooks/5 + ,run_all_hooks/6 ,format_error/1]). -include("rebar.hrl"). @@ -8,35 +9,41 @@ -spec run_all_hooks(file:filename_all(), pre | post, atom() | {atom(), atom()} | string(), - [providers:t()], rebar_state:t()) -> ok. + [providers:t()], rebar_app_info:t(), rebar_state:t()) -> rebar_app_info:t(). +run_all_hooks(Dir, Type, Command, Providers, AppInfo, State) -> + 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) -> - run_provider_hooks(Dir, Type, Command, Providers, State), - run_hooks(Dir, Type, Command, State). + run_provider_hooks(Dir, Type, Command, Providers, rebar_state:opts(State), State), + run_hooks(Dir, Type, Command, rebar_state:opts(State), State). -run_provider_hooks(Dir, Type, Command, Providers, State) -> - case rebar_state:get(State, provider_hooks, []) of +run_provider_hooks(Dir, Type, Command, Providers, Opts, State) -> + case rebar_opts:get(Opts, provider_hooks, []) of [] -> - ok; + State; AllHooks -> TypeHooks = proplists:get_value(Type, AllHooks, []), - run_provider_hooks(Dir, Type, Command, Providers, TypeHooks, State) + run_provider_hooks_(Dir, Type, Command, Providers, TypeHooks, rebar_state:opts(State, Opts)) end. -run_provider_hooks(_Dir, _Type, _Command, _Providers, [], _State) -> - ok; -run_provider_hooks(Dir, Type, Command, Providers, TypeHooks, State) -> +run_provider_hooks_(_Dir, _Type, _Command, _Providers, [], State) -> + State; +run_provider_hooks_(Dir, Type, Command, Providers, TypeHooks, State) -> PluginDepsPaths = rebar_state:code_paths(State, all_plugin_deps), code:add_pathsa(PluginDepsPaths), Providers1 = rebar_state:providers(State), State1 = rebar_state:providers(rebar_state:dir(State, Dir), Providers++Providers1), HookProviders = proplists:get_all_values(Command, TypeHooks), - case rebar_core:do(HookProviders, State1) of {error, ProviderName} -> ?DEBUG(format_error({bad_provider, Type, Command, ProviderName}), []), throw(?PRV_ERROR({bad_provider, Type, Command, ProviderName})); - {ok, _} -> - rebar_utils:remove_from_code_path(PluginDepsPaths) + {ok, State2} -> + rebar_utils:remove_from_code_path(PluginDepsPaths), + State2 end. format_error({bad_provider, Type, Command, {Name, Namespace}}) -> @@ -67,16 +74,16 @@ format_error({bad_provider, Type, Command, Name}) -> %% ERL = ERLANG_ROOT_DIR/bin/erl %% ERLC = ERLANG_ROOT_DIR/bin/erl %% -run_hooks(Dir, pre, Command, State) -> - run_hooks(Dir, pre_hooks, Command, State); -run_hooks(Dir, post, Command, State) -> - run_hooks(Dir, post_hooks, Command, State); -run_hooks(Dir, Type, Command, State) -> - case rebar_state:get(State, Type, []) of +run_hooks(Dir, pre, Command, Opts, State) -> + run_hooks(Dir, pre_hooks, Command, Opts, State); +run_hooks(Dir, post, Command, Opts, State) -> + run_hooks(Dir, post_hooks, Command, Opts, State); +run_hooks(Dir, Type, Command, Opts, State) -> + case rebar_opts:get(Opts, Type, []) of [] -> ok; Hooks -> - Env = create_env(State), + Env = create_env(State, Opts), lists:foreach(fun({_, C, _}=Hook) when C =:= Command -> apply_hook(Dir, Env, Hook); ({C, _}=Hook) when C =:= Command -> @@ -97,8 +104,8 @@ apply_hook(Dir, Env, {Command, Hook}) -> Msg = lists:flatten(io_lib:format("Hook for ~p failed!~n", [Command])), rebar_utils:sh(Hook, [use_stdout, {cd, Dir}, {env, Env}, {abort_on_error, Msg}]). -create_env(State) -> - BaseDir = rebar_state:dir(State), +create_env(State, Opts) -> + BaseDir = rebar_dir:base_dir(State), [ {"REBAR_DEPS_DIR", filename:absname(rebar_dir:deps_dir(State))}, {"REBAR_BUILD_DIR", filename:absname(rebar_dir:base_dir(State))}, @@ -106,10 +113,10 @@ create_env(State) -> {"REBAR_CHECKOUTS_DIR", filename:absname(rebar_dir:checkouts_dir(State))}, {"REBAR_PLUGINS_DIR", filename:absname(rebar_dir:plugins_dir(State))}, {"REBAR_GLOBAL_CONFIG_DIR", filename:absname(rebar_dir:global_config_dir(State))}, - {"REBAR_GLOBAL_CACHE_DIR", filename:absname(rebar_dir:global_cache_dir(State))}, + {"REBAR_GLOBAL_CACHE_DIR", filename:absname(rebar_dir:global_cache_dir(Opts))}, {"REBAR_TEMPLATE_DIR", filename:absname(rebar_dir:template_dir(State))}, {"REBAR_APP_DIRS", join_dirs(BaseDir, rebar_dir:lib_dirs(State))}, - {"REBAR_SRC_DIRS", join_dirs(BaseDir, rebar_dir:all_src_dirs(State))}, + {"REBAR_SRC_DIRS", join_dirs(BaseDir, rebar_dir:all_src_dirs(Opts))}, {"ERLANG_ERTS_VER", erlang:system_info(version)}, {"ERLANG_ROOT_DIR", code:root_dir()}, {"ERLANG_LIB_DIR_erl_interface", code:lib_dir(erl_interface)}, |