%%% @doc external alias for `rebar_agent' for more convenient %%% calls from a shell. -module(r3). -export([do/1, do/2, do/3, async_do/1, async_do/2, async_do/3, break/0, resume/0]). -export(['$handle_undefined_function'/2]). -include("rebar.hrl"). %% @doc alias for `rebar_agent:do/1' -spec do(atom() | string()) -> ok | {error, term()}. do(Command) -> rebar_agent:do(Command). %% @doc alias for `rebar_agent:do/2' -spec do(atom(), atom() | string()) -> ok | {error, term()}. do(Namespace, Command) -> rebar_agent:do(Namespace, Command). %% @doc alias for `rebar_agent:do/3' -spec do(atom(), atom(), string()) -> ok | {error, term()}. do(Namespace, Command, Args) -> rebar_agent:do(Namespace, Command, Args). %% @doc alias for `rebar_agent:async_do/1' -spec async_do(atom()) -> ok. async_do(Command) -> rebar_agent:async_do(Command). %% @doc alias for `rebar_agent:async_do/2' -spec async_do(atom(), atom()) -> ok. async_do(Namespace, Command) -> rebar_agent:async_do(Namespace, Command). %% @doc alias for `rebar_agent:async_do/3' -spec async_do(atom(), atom(), string()) -> ok. async_do(Namespace, Command, Args) -> rebar_agent:async_do(Namespace, Command, Args). 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).