Kaynağa Gözat

Add error message for bad provider hook, fixes #521

pull/522/head
Tristan Sloughter 10 yıl önce
ebeveyn
işleme
4bb2a0c710
3 değiştirilmiş dosya ile 23 ekleme ve 12 silme
  1. +3
    -1
      src/rebar_core.erl
  2. +19
    -10
      src/rebar_hooks.erl
  3. +1
    -1
      test/rebar_hooks_SUITE.erl

+ 3
- 1
src/rebar_core.erl Dosyayı Görüntüle

@ -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}}) ->

+ 19
- 10
src/rebar_hooks.erl Dosyayı Görüntüle

@ -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.

+ 1
- 1
test/rebar_hooks_SUITE.erl Dosyayı Görüntüle

@ -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,

Yükleniyor…
İptal
Kaydet