summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_core.erl4
-rw-r--r--src/rebar_hooks.erl29
-rw-r--r--test/rebar_hooks_SUITE.erl2
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,