You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

58 rivejä
1.9 KiB

%%% @doc external alias for `rebar_agent' for more convenient
%%% calls from a shell.
-module(r3).
-export([do/1, do/2, async_do/1, async_do/2, break/0, resume/0]).
-export(['$handle_undefined_function'/2]).
-include("rebar.hrl").
%% @doc alias for `rebar_agent:do/1'
-spec do(atom()) -> ok | {error, term()}.
do(Command) -> rebar_agent:do(Command).
%% @doc alias for `rebar_agent:do/2'
-spec do(atom(), atom()) -> ok | {error, term()}.
do(Namespace, Command) -> rebar_agent:do(Namespace, Command).
%% @doc alias for `rebar_agent:async_do/1'
-spec async_do(atom()) -> ok | {error, term()}.
async_do(Command) -> rebar_agent:async_do(Command).
%% @doc alias for `rebar_agent:async_do/2'
-spec async_do(atom(), atom()) -> ok | {error, term()}.
async_do(Namespace, Command) -> rebar_agent:async_do(Namespace, Command).
break() ->
case whereis(rebar_agent) of % is the shell running
undefined ->
ok;
Pid ->
{dictionary, Dict} = process_info(Pid, dictionary),
case lists:keyfind(cmd_type, 1, Dict) of
{cmd_type, async} ->
Self = self(),
Ref = make_ref(),
spawn_link(fun() ->
register(r3_breakpoint_handler, self()),
receive
resume ->
Self ! Ref
end
end),
io:format(user, "~n=== BREAK ===~n", []),
receive
Ref -> ok
end;
_ ->
?DEBUG("ignoring breakpoint since command is not run "
"in async mode", []),
ok
end
end.
resume() ->
r3_breakpoint_handler ! resume,
ok.
%% @private defer to rebar_agent
'$handle_undefined_function'(Cmd, Args) ->
rebar_agent:'$handle_undefined_function'(Cmd, Args).