summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2015-06-01 15:12:54 -0400
committerFred Hebert <mononcqc@ferd.ca>2015-06-01 15:12:54 -0400
commit5c78f96c415de37760839e608794c57f41c1a695 (patch)
treeb50eea9f64891a8e89198efda1f4dbcd0c39527f
parente09be186c10c113040fd984fa27cbda5581eef0f (diff)
Handle custom logger shell breakage
When swapping handlers, if a custom shell has been installed, it's possible it'll take over the tty and other options. This may break common operations that work on an otherwise regular shell, so we ignore failures and let things work with the custom shell only.
-rw-r--r--src/rebar_prv_shell.erl18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/rebar_prv_shell.erl b/src/rebar_prv_shell.erl
index bd49ee1..e407ff2 100644
--- a/src/rebar_prv_shell.erl
+++ b/src/rebar_prv_shell.erl
@@ -111,12 +111,18 @@ setup_shell() ->
%% liveness check.
_ = [catch erlang:group_leader(whereis(user), Pid) || Pid <- NeedsUpdate,
is_process_alive(Pid)],
- %% enable error_logger's tty output
- ok = error_logger:swap_handler(tty),
- %% disable the simple error_logger (which may have been added multiple
- %% times). removes at most the error_logger added by init and the
- %% error_logger added by the tty handler
- ok = remove_error_handler(3).
+ try
+ %% enable error_logger's tty output
+ error_logger:swap_handler(tty),
+ %% disable the simple error_logger (which may have been added multiple
+ %% times). removes at most the error_logger added by init and the
+ %% error_logger added by the tty handler
+ remove_error_handler(3)
+ catch
+ E:R -> % may fail with custom loggers
+ ?DEBUG("Logger changes failed for ~p:~p (~p)", [E,R,erlang:get_stacktrace()]),
+ hope_for_best
+ end.
setup_paths(State) ->
%% Add deps to path