diff options
| -rw-r--r-- | src/rebar_core.erl | 4 | ||||
| -rw-r--r-- | src/rebar_hooks.erl | 29 | ||||
| -rw-r--r-- | test/rebar_hooks_SUITE.erl | 2 | 
3 files changed, 23 insertions, 12 deletions
| diff --git a/src/rebar_core.erl b/src/rebar_core.erl index 7439cff..b1647f0 100644 --- a/src/rebar_core.erl +++ b/src/rebar_core.erl @@ -130,7 +130,9 @@ do([ProviderName | Rest], State) ->          error:undef ->              %% This should really only happen if a plugin provider doesn't export do/1              ?DEBUG("Undefined call to provider's do function:~n~p", [erlang:get_stacktrace()]), -            ?PRV_ERROR({bad_provider_namespace, ProviderName}) +            ?PRV_ERROR({bad_provider_namespace, ProviderName}); +        error:{badrecord,provider} -> +            {error, ProviderName}      end.  format_error({bad_provider_namespace, {Namespace, Name}}) -> diff --git a/src/rebar_hooks.erl b/src/rebar_hooks.erl index 9518542..ebc4d2d 100644 --- a/src/rebar_hooks.erl +++ b/src/rebar_hooks.erl @@ -1,6 +1,9 @@  -module(rebar_hooks). --export([run_all_hooks/5]). +-export([run_all_hooks/5 +        ,format_error/1]). + +-include_lib("providers/include/providers.hrl").  -spec run_all_hooks(file:filename_all(), pre | post,                     atom() | {atom(), atom()} | string(), @@ -18,13 +21,21 @@ run_provider_hooks(Dir, Type, Command, Providers, State) ->      TypeHooks = proplists:get_value(Type, AllHooks, []),      HookProviders = proplists:get_all_values(Command, TypeHooks), -    State2 = rebar_core:do(HookProviders, State1), -    rebar_utils:remove_from_code_path(PluginDepsPaths), -    State2. +    case rebar_core:do(HookProviders, State1) of +        {error, ProviderName} -> +            throw(?PRV_ERROR({bad_provider, Type, Command, ProviderName})); +        {ok, _} -> +            rebar_utils:remove_from_code_path(PluginDepsPaths) +    end. + +format_error({bad_provider, Type, Command, {Name, Namespace}}) -> +    io_lib:format("Unable to run ~s 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 ~s hooks for '~p', command '~p' not found.", [Type, Command, Name]).  %% @doc The following environment variables are exported when running  %% a hook (absolute paths): -%%  +%%  %% REBAR_DEPS_DIR          = rebar_dir:deps_dir/1  %% REBAR_BUILD_DIR         = rebar_dir:base_dir/1  %% REBAR_ROOT_DIR          = rebar_dir:root_dir/1 @@ -36,7 +47,7 @@ run_provider_hooks(Dir, Type, Command, Providers, State) ->  %% REBAR_APP_DIRS          = rebar_dir:lib_dirs/1  %% REBAR_SRC_DIRS          = rebar_dir:src_dirs/1  %% -%% autoconf compatible variables  +%% autoconf compatible variables  %% (see: http://www.gnu.org/software/autoconf/manual/autoconf.html#Erlang-Libraries):  %% ERLANG_ERTS_VER              = erlang:system_info(version)  %% ERLANG_ROOT_DIR              = code:root_dir/0 @@ -100,8 +111,6 @@ join_dirs(BaseDir, Dirs) ->  re_version(Path) ->      case re:run(Path, "^.*-(?<VER>[^/-]*)$", [{capture, [1], list}]) of -	nomatch -> ""; -	{match, [Ver]} -> Ver +        nomatch -> ""; +        {match, [Ver]} -> Ver      end. - -     diff --git a/test/rebar_hooks_SUITE.erl b/test/rebar_hooks_SUITE.erl index 3908ca1..ec5cc9a 100644 --- a/test/rebar_hooks_SUITE.erl +++ b/test/rebar_hooks_SUITE.erl @@ -62,7 +62,7 @@ escriptize_artifacts(Config) ->                                         ]),      {ok, RConf} = file:consult(RConfFile), -    try rebar_test_utils:run_and_check(Config, RConf, ["compile"], []) +    try rebar_test_utils:run_and_check(Config, RConf, ["compile"], return)      catch          {error,           {rebar_prv_compile, | 
