diff options
| -rw-r--r-- | src/rebar3.erl | 33 | 
1 files changed, 23 insertions, 10 deletions
| diff --git a/src/rebar3.erl b/src/rebar3.erl index aae9ec0..9aad909 100644 --- a/src/rebar3.erl +++ b/src/rebar3.erl @@ -64,7 +64,7 @@ main(Args) ->  %% Erlang-API entry point  run(BaseState, Commands) -> -    start_and_load_apps(), +    start_and_load_apps(api),      BaseState1 = rebar_state:set(BaseState, task, Commands),      BaseState2 = rebar_state:set(BaseState1, caller, api), @@ -78,7 +78,7 @@ run(BaseState, Commands) ->  %% ====================================================================  run(RawArgs) -> -    start_and_load_apps(), +    start_and_load_apps(command_line),      BaseState = init_config(),      BaseState1 = rebar_state:set(BaseState, caller, command_line), @@ -272,19 +272,32 @@ handle_error(Error) ->      ?INFO("When submitting a bug report, please include the output of `rebar3 report \"your command\"`", []),      erlang:halt(1). -start_and_load_apps() -> +start_and_load_apps(Caller) ->      _ = application:load(rebar),      %% Make sure crypto is running -    case crypto:start() of -        ok -> ok; -        {error,{already_started,crypto}} -> ok -    end, -    application:start(asn1), -    application:start(public_key), -    application:start(ssl), +    ensure_running(crypto, Caller), +    ensure_running(asn1, Caller), +    ensure_running(public_key, Caller), +    ensure_running(ssl, Caller),      inets:start(),      inets:start(httpc, [{profile, rebar}]). +ensure_running(App, Caller) -> +    case application:start(App) of +        ok -> ok; +        {error, {already_started, App}} -> ok; +        {error, Reason} -> +            %% These errors keep rebar3's own configuration to be loaded, +            %% which disables the log level and causes a failure without +            %% showing the error message. Bypass this entirely by overriding +            %% the default value (which allows logging to take place) +            %% and shut things down manually. +            Log = ec_cmd_log:new(warn, Caller), +            ec_cmd_log:error(Log, "Rebar dependency ~p could not be loaded " +                                  "for reason ~p~n", [App, Reason]), +            throw(rebar_abort) +    end. +  state_from_global_config(Config, GlobalConfigFile) ->      rebar_utils:set_httpc_options(),      GlobalConfigTerms = rebar_config:consult_file(GlobalConfigFile), | 
