瀏覽代碼

return error messages from providers

pull/3/head
Tristan Sloughter 10 年之前
父節點
當前提交
e9a3396e56
共有 18 個檔案被更改,包括 67 行新增47 行删除
  1. +4
    -2
      src/rebar3.erl
  2. +14
    -6
      src/rebar_core.erl
  3. +14
    -13
      src/rebar_provider.erl
  4. +1
    -1
      src/rebar_prv_app_discovery.erl
  5. +1
    -1
      src/rebar_prv_compile.erl
  6. +1
    -1
      src/rebar_prv_deps.erl
  7. +1
    -1
      src/rebar_prv_do.erl
  8. +1
    -1
      src/rebar_prv_help.erl
  9. +6
    -5
      src/rebar_prv_install_deps.erl
  10. +1
    -1
      src/rebar_prv_lock.erl
  11. +1
    -1
      src/rebar_prv_new.erl
  12. +1
    -1
      src/rebar_prv_packages.erl
  13. +1
    -1
      src/rebar_prv_release.erl
  14. +1
    -1
      src/rebar_prv_shell.erl
  15. +1
    -1
      src/rebar_prv_tar.erl
  16. +11
    -7
      src/rebar_prv_update.erl
  17. +1
    -1
      src/rebar_prv_version.erl
  18. +6
    -2
      src/rebar_state.erl

+ 4
- 2
src/rebar3.erl 查看文件

@ -48,6 +48,9 @@ main(Args) ->
ok;
rebar_abort ->
rebar_utils:delayed_halt(1);
{error, Error} ->
?ERROR(Error, []),
rebar_utils:delayed_halt(1);
Error ->
%% Nothing should percolate up from rebar_core;
%% Dump this error to console
@ -146,8 +149,7 @@ run_aux(State, Args) ->
State4 = rebar_state:create_logic_providers(Providers++PluginProviders, State3),
Task = rebar_state:get(State4, task, "help"),
rebar_core:process_command(rebar_state:command_args(State4, Args), list_to_atom(Task)),
ok.
rebar_core:process_command(rebar_state:command_args(State4, Args), list_to_atom(Task)).
%%
%% Parse command line arguments using getopt and also filtering out any

+ 14
- 6
src/rebar_core.erl 查看文件

@ -31,17 +31,25 @@
-include("rebar.hrl").
-spec process_command(rebar_state:t(), atom()) -> {ok, rebar_state:t()} | {error, string()}.
process_command(State, Command) ->
%% ? rebar_prv_install_deps:setup_env(State),
TargetProviders = rebar_provider:get_target_providers(Command, State),
do(TargetProviders, State).
lists:foldl(fun(TargetProvider, Conf) ->
Provider = rebar_provider:get_provider(TargetProvider
,rebar_state:providers(Conf)),
{ok, Conf1} = rebar_provider:do(Provider, Conf),
Conf1
end, State, TargetProviders).
-spec do([atom()], rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do([], State) ->
{ok, State};
do([ProviderName | Rest], State) ->
Provider = rebar_provider:get_provider(ProviderName
,rebar_state:providers(State)),
case rebar_provider:do(Provider, State) of
{ok, State1} ->
do(Rest, State1);
{error, Error} ->
{error, Error}
end.
update_code_path(State) ->
true = rebar_utils:expand_code_path(),

+ 14
- 13
src/rebar_provider.erl 查看文件

@ -23,7 +23,7 @@
-type provider_name() :: atom().
-callback init(rebar_state:t()) -> {ok, rebar_state:t()}.
-callback do(rebar_state:t()) -> {ok, rebar_state:t()}.
-callback do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
%%%===================================================================
%%% API
@ -59,20 +59,21 @@ create(Attrs) ->
%%
%% @param Provider the provider object
%% @param State the current state of the system
-spec do(Provider::t(), rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(Provider::t(), rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(Provider, 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).
-spec run_hook_plugins([t()], rebar_state:t()) -> {ok, rebar_state:t()}.
run_hook_plugins(Hooks, State) ->
State1 = lists:foldl(fun(Hook, StateAcc) ->
{ok, StateAcc1} = rebar_provider:do(Hook, StateAcc),
StateAcc1
end, State, Hooks),
{ok, State1}.
run_all([PreHooks++Provider | PostHooks], State).
-spec run_all([t()], rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
run_all([], State) ->
{ok, State};
run_all([Provider | Rest], State) ->
case (Provider#provider.provider_impl):do(State) of
{ok, State1} ->
run_all(Rest, State1);
{error, Error} ->
{error, Error}
end.
%%% @doc get the name of the module that implements the provider
%%% @param Provider the provider object

+ 1
- 1
src/rebar_prv_app_discovery.erl 查看文件

@ -29,7 +29,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
LibDirs = rebar_state:get(State, lib_dirs, ?DEFAULT_LIB_DIRS),
State1 = rebar_app_discover:do(State, LibDirs),

+ 1
- 1
src/rebar_prv_compile.erl 查看文件

@ -27,7 +27,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
ProjectApps = rebar_state:project_apps(State),
Deps = rebar_state:get(State, deps_to_build, []),

+ 1
- 1
src/rebar_prv_deps.erl 查看文件

@ -22,7 +22,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
{ok, State}.

+ 1
- 1
src/rebar_prv_do.erl 查看文件

@ -29,7 +29,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
Tasks = args_to_tasks(rebar_state:command_args(State)),
State1 = lists:foldl(fun(TaskArgs, StateAcc) ->

+ 1
- 1
src/rebar_prv_help.erl 查看文件

@ -29,7 +29,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
help(State),
{ok, State}.

+ 6
- 5
src/rebar_prv_install_deps.erl 查看文件

@ -64,7 +64,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
ProjectApps = rebar_state:project_apps(State),
{ok, State1} = case rebar_state:get(State, locks, []) of
@ -123,9 +123,9 @@ handle_deps(State, Deps, Update) ->
end, S)
end,
AllDeps = lists:keymerge(2, lists:keymerge(2
,rebar_state:src_apps(State2)
,Solved), SrcDeps),
AllDeps = lists:ukeymerge(2
,lists:ukeysort(2, rebar_state:src_apps(State2))
,lists:ukeysort(2, Solved)),
%% Sort all apps to build order
State3 = rebar_state:set(State2, all_deps, AllDeps),
@ -191,7 +191,8 @@ update_src_deps(Level, State, Update) ->
,NewBinaryDeps++BinaryDepsAcc
,rebar_state:src_apps(StateAcc, AppInfo2)};
false ->
{SrcDepsAcc, BinaryDepsAcc, State}
AppInfo1 = rebar_app_info:dep_level(AppInfo, Level),
{SrcDepsAcc, BinaryDepsAcc, rebar_state:src_apps(StateAcc, AppInfo1)}
end
end
end, {[], rebar_state:binary_deps(State), State}, SrcDeps) of

+ 1
- 1
src/rebar_prv_lock.erl 查看文件

@ -26,7 +26,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
case rebar_state:get(State, locks, []) of
[] ->

+ 1
- 1
src/rebar_prv_new.erl 查看文件

@ -26,7 +26,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
case rebar_state:command_args(State) of
[TemplateName] ->

+ 1
- 1
src/rebar_prv_packages.erl 查看文件

@ -22,7 +22,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
{Packages, _Graph} = rebar_packages:get_packages(State),
print_packages(Packages),

+ 1
- 1
src/rebar_prv_release.erl 查看文件

@ -29,7 +29,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(Config) ->
relx:main(["release"]),
{ok, Config}.

+ 1
- 1
src/rebar_prv_shell.erl 查看文件

@ -54,7 +54,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(Config) ->
shell(),
{ok, Config}.

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

@ -29,7 +29,7 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
relx:main(["release tar"]),
{ok, State}.

+ 11
- 7
src/rebar_prv_update.erl 查看文件

@ -29,17 +29,21 @@ init(State) ->
opts = []}),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
case rebar_state:command_args(State) of
[Name] ->
?ERROR("Updating ~s~n", [Name]),
?INFO("Updating ~s~n", [Name]),
Locks = rebar_state:get(State, locks, []),
{_, _, _, Level} = lists:keyfind(ec_cnv:to_binary(Name), 1, Locks),
Deps = rebar_state:get(State, deps),
Dep = lists:keyfind(list_to_atom(Name), 1, Deps),
rebar_prv_install_deps:handle_deps(State, [Dep], {true, ec_cnv:to_binary(Name), Level}),
{ok, State};
case lists:keyfind(ec_cnv:to_binary(Name), 1, Locks) of
{_, _, _, Level} ->
Deps = rebar_state:get(State, deps),
Dep = lists:keyfind(list_to_atom(Name), 1, Deps),
rebar_prv_install_deps:handle_deps(State, [Dep], {true, ec_cnv:to_binary(Name), Level}),
{ok, State};
false ->
{error, io_lib:format("No such dependency ~s~n", [Name])}
end;
[] ->
?INFO("Updating package index...~n", []),
Url = url(State),

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

@ -30,7 +30,7 @@ init(State) ->
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
rebar3:version(),
{ok, State}.

+ 6
- 2
src/rebar_state.erl 查看文件

@ -111,7 +111,9 @@ src_deps(#state_t{src_deps=SrcDeps}) ->
src_deps(State=#state_t{src_deps=SrcDeps}, NewSrcDeps) when is_list(SrcDeps) ->
State#state_t{src_deps=NewSrcDeps};
src_deps(State=#state_t{src_deps=SrcDeps}, SrcDep) ->
State#state_t{src_deps=[SrcDep | SrcDeps]}.
Name = rebar_app_info:name(SrcDep),
NewSrcDeps = lists:keystore(Name, 2, SrcDeps, SrcDep),
State#state_t{src_deps=NewSrcDeps}.
src_apps(#state_t{src_apps=SrcApps}) ->
SrcApps.
@ -119,7 +121,9 @@ src_apps(#state_t{src_apps=SrcApps}) ->
src_apps(State=#state_t{src_apps=_SrcApps}, NewSrcApps) when is_list(NewSrcApps) ->
State#state_t{src_apps=NewSrcApps};
src_apps(State=#state_t{src_apps=SrcApps}, NewSrcApp) ->
State#state_t{src_apps=[NewSrcApp | SrcApps]}.
Name = rebar_app_info:name(NewSrcApp),
NewSrcApps = lists:keystore(Name, 2, SrcApps, NewSrcApp),
State#state_t{src_apps=NewSrcApps}.
project_apps(#state_t{project_apps=Apps}) ->
Apps.

Loading…
取消
儲存