@ -74,7 +74,21 @@ process_command(State, Command) ->
% % properly exist for non - default namespaces outside of
% % dynamic dispatch calls for namespaces .
do ( TargetProviders , rebar_state : namespace ( State , default ) ) ;
Command when Command =:= do ; Command =:= as - >
Command when Command =:= as , Namespace =:= undefined - >
% % Because of the possible forms such as :
% % ' rebar3 as profile task ` , ` rebar3 as profile do task `
% % and ` rebar3 as profile namespace task ` , we can only know
% % whether we 're in the first ' as ' or a namespace ' as ' by
% % looking at profiles ( as makes them non - default ) .
% % The namespace 'as' is banned . It also makes it impossible
% % to have both $R EBAR_PROFILE set and use 'as' in a command
case rebar_state : current_profiles ( State ) of
[ default ] - >
do ( [ { default , hd ( TargetProviders ) } | tl ( TargetProviders ) ] , State ) ;
_ - >
{ error , " Namespace 'as' is forbidden " }
end ;
Command when Command =:= do - >
do ( TargetProviders , State ) ;
_ - >
Profiles = providers : profiles ( CommandProvider ) ,
@ -83,7 +97,12 @@ process_command(State, Command) ->
case getopt : parse ( Opts , rebar_state : command_args ( State1 ) ) of
{ ok , Args } - >
State2 = rebar_state : command_parsed_args ( State1 , Args ) ,
do ( TargetProviders , State2 ) ;
case Namespace of
undefined - > % we ' re executing commands , set the default namespace
do ( TargetProviders , rebar_state : namespace ( State2 , default ) ) ;
_ - >
do ( TargetProviders , State2 )
end ;
{ error , { invalid_option , Option } } - >
{ error , io_lib : format ( " Invalid option ~s on task ~p " , [ Option , Command ] ) }
end
@ -94,8 +113,19 @@ process_command(State, Command) ->
do ( [ ] , State ) - >
{ ok , State } ;
do ( [ ProviderName | Rest ] , State ) - >
Provider = providers : get_provider ( ProviderName
, rebar_state : providers ( State ) ) ,
% % Special providers like 'as' , 'do' or some hooks may be passed
% % as a tuple { Namespace , Name } , otherwise not . Handle them
% % on a per - need basis .
Provider = case ProviderName of
{ Namespace , Name } - >
providers : get_provider ( Name
, rebar_state : providers ( State )
, Namespace ) ;
_ - >
providers : get_provider ( ProviderName
, rebar_state : providers ( State )
, rebar_state : namespace ( State ) )
end ,
case providers : do ( Provider , State ) of
{ ok , State1 } - >
do ( Rest , State1 ) ;