diff options
-rw-r--r-- | src/rebar_fetch.erl | 7 | ||||
-rw-r--r-- | src/rebar_prv_test_deps.erl | 27 | ||||
-rw-r--r-- | src/rebar_utils.erl | 17 |
3 files changed, 28 insertions, 23 deletions
diff --git a/src/rebar_fetch.erl b/src/rebar_fetch.erl index a7ae446..987477f 100644 --- a/src/rebar_fetch.erl +++ b/src/rebar_fetch.erl @@ -59,7 +59,12 @@ needs_update(AppDir, Source) -> {error, _}=Error -> Error; Module -> - Module:needs_update(AppDir, Source) + try + Module:needs_update(AppDir, Source) + catch + _:_ -> + true + end end. get_resource_type({Type, Location, _}) -> diff --git a/src/rebar_prv_test_deps.erl b/src/rebar_prv_test_deps.erl index 081b210..a51f635 100644 --- a/src/rebar_prv_test_deps.erl +++ b/src/rebar_prv_test_deps.erl @@ -9,7 +9,9 @@ -include("rebar.hrl"). -define(PROVIDER, test_deps). --define(DEPS, [install_deps]). +-define(DEPS, []). + +-define(DEFAULT_TEST_DEPS_DIR, "_tdeps"). %% =================================================================== %% Public API @@ -17,13 +19,11 @@ -spec init(rebar_state:t()) -> {ok, rebar_state:t()}. init(State) -> - Providers = rebar_state:providers(State), - CompileProvider = providers:get_provider(compile, Providers), State1 = rebar_state:add_provider(State, providers:create([{name, ?PROVIDER}, {module, ?MODULE}, {bare, true}, {deps, ?DEPS}, - {hooks, {[], [CompileProvider]}}, + {hooks, {[], []}}, {example, undefined}, {short_desc, "Install dependencies needed only for testing."}, {desc, ""}, @@ -37,19 +37,18 @@ do(State) -> Names = [ec_cnv:to_binary(element(1, Dep)) || Dep <- TestDeps], ProjectApps1 = [rebar_app_info:deps(A, Names) || A <- ProjectApps], - {ok, State1} = rebar_prv_install_deps:handle_deps(State, TestDeps), - AllDeps = rebar_state:get(State1, all_deps, []), + TestDepsDir = rebar_state:get(State, test_deps_dir, ?DEFAULT_TEST_DEPS_DIR), + DepsDir = rebar_state:get(State, deps_dir, ?DEFAULT_DEPS_DIR), + State1 = rebar_state:set(State, deps_dir, TestDepsDir), + {ok, State2} = rebar_prv_install_deps:handle_deps(State1, TestDeps), + AllDeps = rebar_state:get(State2, all_deps, []), + State3 = rebar_state:set(State2, deps_dir, DepsDir), case rebar_topo:sort_apps(ProjectApps1++AllDeps) of {ok, Sort} -> - _ToBuild = lists:dropwhile(fun rebar_app_info:valid/1, Sort), - %% lists:foreach(fun(AppInfo) -> - %% AppDir = rebar_app_info:dir(AppInfo), - %% C = rebar_config:consult(AppDir), - %% S = rebar_state:new(State1, C, AppDir), - %% rebar_prv_compile:build(S, AppInfo) - %% end, ToBuild), - {ok, State1}; + ToBuild = lists:dropwhile(fun rebar_app_info:valid/1, Sort -- ProjectApps1), + State4 = rebar_state:set(State3, deps_to_build, ToBuild), + {ok, State4}; {error, Error} -> {error, Error} end. diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl index ae1d126..c39bbfa 100644 --- a/src/rebar_utils.erl +++ b/src/rebar_utils.erl @@ -135,7 +135,7 @@ sh(Command0, Options0) -> ?DEBUG("sh info:\n\tcwd: ~p\n\tcmd: ~s\n", [get_cwd(), Command0]), ?DEBUG("\topts: ~p\n", [Options0]), - DefaultOptions = [{use_stdout, false}, abort_on_error], + DefaultOptions = [{use_stdout, false}, debug_and_abort_on_error], Options = [expand_sh_flag(V) || V <- proplists:compact(Options0 ++ DefaultOptions)], @@ -359,9 +359,9 @@ expand_sh_flag(return_on_error) -> expand_sh_flag({abort_on_error, Message}) -> {error_handler, log_msg_and_abort(Message)}; -expand_sh_flag(abort_on_error) -> +expand_sh_flag(debug_and_abort_on_error) -> {error_handler, - fun log_and_abort/2}; + fun debug_and_abort/2}; expand_sh_flag(use_stdout) -> {output_handler, fun(Line, Acc) -> @@ -385,11 +385,12 @@ log_msg_and_abort(Message) -> ?ABORT(Message, []) end. --spec log_and_abort(string(), {integer(), string()}) -> no_return(). -log_and_abort(Command, {Rc, Output}) -> - ?ABORT("sh(~s)~n" - "failed with return code ~w and the following output:~n" - "~s~n", [Command, Rc, Output]). +-spec debug_and_abort(string(), {integer(), string()}) -> no_return(). +debug_and_abort(Command, {Rc, Output}) -> + ?DEBUG("sh(~s)~n" + "failed with return code ~w and the following output:~n" + "~s~n", [Command, Rc, Output]), + throw(rebar_abort). sh_loop(Port, Fun, Acc) -> receive |