@ -1,7 +1,7 @@
% % % @ doc Runs a process that holds a rebar3 state and can be used
% % % @ doc Runs a process that holds a rebar3 state and can be used
% % % to statefully maintain loaded project state into a running VM .
% % % to statefully maintain loaded project state into a running VM .
- module ( rebar_agent ) .
- module ( rebar_agent ) .
- export ( [ start_link / 1 , do / 1 , do / 2 ] ) .
- export ( [ start_link / 1 , do / 1 , do / 2 , async_do / 1 , async_do / 2 ]) .
- export ( [ '$handle_undefined_function' / 2 ] ) .
- export ( [ '$handle_undefined_function' / 2 ] ) .
- export ( [ init / 1 ,
- export ( [ init / 1 ,
handle_call / 3 , handle_cast / 2 , handle_info / 2 ,
handle_call / 3 , handle_cast / 2 , handle_info / 2 ,
@ -35,6 +35,18 @@ do(Namespace, Command) when is_atom(Namespace), is_atom(Command) ->
do ( Namespace , Args ) when is_atom ( Namespace ) , is_list ( Args ) - >
do ( Namespace , Args ) when is_atom ( Namespace ) , is_list ( Args ) - >
gen_server : call ( ? MODULE , { cmd , Namespace , do , Args } , infinity ) .
gen_server : call ( ? MODULE , { cmd , Namespace , do , Args } , infinity ) .
- spec async_do ( atom ( ) ) - > ok | { error , term ( ) } .
async_do ( Command ) when is_atom ( Command ) - >
gen_server : cast ( ? MODULE , { cmd , Command } ) ;
async_do ( Args ) when is_list ( Args ) - >
gen_server : cast ( ? MODULE , { cmd , default , do , Args } ) .
- spec async_do ( atom ( ) , atom ( ) ) - > ok .
async_do ( Namespace , Command ) when is_atom ( Namespace ) , is_atom ( Command ) - >
gen_server : cast ( ? MODULE , { cmd , Namespace , Command } ) ;
async_do ( Namespace , Args ) when is_atom ( Namespace ) , is_list ( Args ) - >
gen_server : cast ( ? MODULE , { cmd , Namespace , do , Args } ) .
'$handle_undefined_function' ( Cmd , [ Namespace , Args ] ) - >
'$handle_undefined_function' ( Cmd , [ Namespace , Args ] ) - >
gen_server : call ( ? MODULE , { cmd , Namespace , Cmd , Args } , infinity ) ;
gen_server : call ( ? MODULE , { cmd , Namespace , Cmd , Args } , infinity ) ;
'$handle_undefined_function' ( Cmd , [ Args ] ) - >
'$handle_undefined_function' ( Cmd , [ Args ] ) - >
@ -54,20 +66,44 @@ init(State) ->
% % @ private
% % @ private
handle_call ( { cmd , Command } , _ From , State = #state { state = RState , cwd = Cwd } ) - >
handle_call ( { cmd , Command } , _ From , State = #state { state = RState , cwd = Cwd } ) - >
MidState = maybe_show_warning ( State ) ,
MidState = maybe_show_warning ( State ) ,
put ( cmd_type , sync ) ,
{ Res , NewRState } = run ( default , Command , " " , RState , Cwd ) ,
{ Res , NewRState } = run ( default , Command , " " , RState , Cwd ) ,
put ( cmd_type , undefined ) ,
{ reply , Res , MidState #state { state = NewRState } , hibernate } ;
{ reply , Res , MidState #state { state = NewRState } , hibernate } ;
handle_call ( { cmd , Namespace , Command } , _ From , State = #state { state = RState , cwd = Cwd } ) - >
handle_call ( { cmd , Namespace , Command } , _ From , State = #state { state = RState , cwd = Cwd } ) - >
MidState = maybe_show_warning ( State ) ,
MidState = maybe_show_warning ( State ) ,
put ( cmd_type , sync ) ,
{ Res , NewRState } = run ( Namespace , Command , " " , RState , Cwd ) ,
{ Res , NewRState } = run ( Namespace , Command , " " , RState , Cwd ) ,
put ( cmd_type , undefined ) ,
{ reply , Res , MidState #state { state = NewRState } , hibernate } ;
{ reply , Res , MidState #state { state = NewRState } , hibernate } ;
handle_call ( { cmd , Namespace , Command , Args } , _ From , State = #state { state = RState , cwd = Cwd } ) - >
handle_call ( { cmd , Namespace , Command , Args } , _ From , State = #state { state = RState , cwd = Cwd } ) - >
MidState = maybe_show_warning ( State ) ,
MidState = maybe_show_warning ( State ) ,
put ( cmd_type , sync ) ,
{ Res , NewRState } = run ( Namespace , Command , Args , RState , Cwd ) ,
{ Res , NewRState } = run ( Namespace , Command , Args , RState , Cwd ) ,
put ( cmd_type , undefined ) ,
{ reply , Res , MidState #state { state = NewRState } , hibernate } ;
{ reply , Res , MidState #state { state = NewRState } , hibernate } ;
handle_call ( _ Call , _ From , State ) - >
handle_call ( _ Call , _ From , State ) - >
{ noreply , State } .
{ noreply , State } .
% % @ private
% % @ private
handle_cast ( { cmd , Command } , State = #state { state = RState , cwd = Cwd } ) - >
MidState = maybe_show_warning ( State ) ,
put ( cmd_type , async ) ,
{ _ , NewRState } = run ( default , Command , " " , RState , Cwd ) ,
put ( cmd_type , undefined ) ,
{ noreply , MidState #state { state = NewRState } , hibernate } ;
handle_cast ( { cmd , Namespace , Command } , State = #state { state = RState , cwd = Cwd } ) - >
MidState = maybe_show_warning ( State ) ,
put ( cmd_type , async ) ,
{ _ , NewRState } = run ( Namespace , Command , " " , RState , Cwd ) ,
put ( cmd_type , undefined ) ,
{ noreply , MidState #state { state = NewRState } , hibernate } ;
handle_cast ( { cmd , Namespace , Command , Args } , State = #state { state = RState , cwd = Cwd } ) - >
MidState = maybe_show_warning ( State ) ,
put ( cmd_type , async ) ,
{ _ , NewRState } = run ( Namespace , Command , Args , RState , Cwd ) ,
put ( cmd_type , undefined ) ,
{ noreply , MidState #state { state = NewRState } , hibernate } ;
handle_cast ( _ Cast , State ) - >
handle_cast ( _ Cast , State ) - >
{ noreply , State } .
{ noreply , State } .