@ -12,20 +12,34 @@
atom ( ) | { atom ( ) , atom ( ) } | string ( ) ,
atom ( ) | { atom ( ) , atom ( ) } | string ( ) ,
[ providers : t ( ) ] , rebar_app_info : t ( ) , rebar_state : t ( ) ) - > rebar_app_info : t ( ) .
[ providers : t ( ) ] , rebar_app_info : t ( ) , rebar_state : t ( ) ) - > rebar_app_info : t ( ) .
run_all_hooks ( Dir , Type , Command , Providers , AppInfo , State ) - >
run_all_hooks ( Dir , Type , Command , Providers , AppInfo , State ) - >
? DEBUG ( " Running hooks for ~p in app ~ ts ( ~ ts) with configuration: " ,
[ Command , rebar_app_info : name ( AppInfo ) , Dir ] ) ,
State1 = rebar_state : current_app ( State , AppInfo ) ,
State1 = rebar_state : current_app ( State , AppInfo ) ,
State2 = run_provider_hooks ( Dir , Type , Command , Providers , rebar_app_info : opts ( AppInfo ) , State1 ) ,
State2 = run_provider_hooks ( Dir , Type , Command , Providers , rebar_app_info : opts ( AppInfo ) , State1 ) ,
run_hooks ( Dir , Type , Command , rebar_app_info : opts ( AppInfo ) , State1 ) ,
run_hooks ( Dir , Type , Command , rebar_app_info : opts ( AppInfo ) , State1 ) ,
rebar_state : current_app ( State2 ) .
rebar_state : current_app ( State2 ) .
run_all_hooks ( Dir , Type , Command , Providers , State ) - >
run_all_hooks ( Dir , Type , Command , Providers , State ) - >
? DEBUG ( " Running hooks for ~p with configuration: " , [ Command ] ) ,
run_provider_hooks ( Dir , Type , Command , Providers , rebar_state : opts ( State ) , State ) ,
run_provider_hooks ( Dir , Type , Command , Providers , rebar_state : opts ( State ) , State ) ,
run_hooks ( Dir , Type , Command , rebar_state : opts ( State ) , State ) .
run_hooks ( Dir , Type , Command , rebar_state : opts ( State ) , State ) .
run_project_and_app_hooks ( Dir , Type , Command , Providers , State ) - >
run_project_and_app_hooks ( Dir , Type , Command , Providers , State ) - >
ProjectApps = rebar_state : project_apps ( State ) ,
ProjectApps = rebar_state : project_apps ( State ) ,
? DEBUG ( " Running app-specific hooks " , [ ] ) ,
[ rebar_hooks : run_all_hooks ( Dir , Type , Command , Providers , AppInfo , State ) | | AppInfo < - ProjectApps ] ,
[ rebar_hooks : run_all_hooks ( Dir , Type , Command , Providers , AppInfo , State ) | | AppInfo < - ProjectApps ] ,
? DEBUG ( " Running project-wide hooks " , [ ] ) ,
run_all_hooks ( Dir , Type , Command , Providers , State ) .
run_all_hooks ( Dir , Type , Command , Providers , State ) .
format_error ( { bad_provider , Type , Command , { Name , Namespace } } ) - >
io_lib : format ( " Unable to run ~ ts hooks for ' ~p ', command ' ~p ' in namespace ' ~p ' not found. " , [ Type , Command , Namespace , Name ] ) ;
format_error ( { bad_provider , Type , Command , Name } ) - >
io_lib : format ( " Unable to run ~ ts hooks for ' ~p ', command ' ~p ' not found. " , [ Type , Command , Name ] ) .
% % % % % % % % % % % % % % %
% % % PRIVATE % % %
% % % % % % % % % % % % % % %
run_provider_hooks ( Dir , Type , Command , Providers , Opts , State ) - >
run_provider_hooks ( Dir , Type , Command , Providers , Opts , State ) - >
case rebar_opts : get ( Opts , provider_hooks , [ ] ) of
case rebar_opts : get ( Opts , provider_hooks , [ ] ) of
[ ] - >
[ ] - >
@ -40,11 +54,14 @@ run_provider_hooks_(_Dir, _Type, _Command, _Providers, [], State) ->
run_provider_hooks_ ( Dir , Type , Command , Providers , TypeHooks , State ) - >
run_provider_hooks_ ( Dir , Type , Command , Providers , TypeHooks , State ) - >
case proplists : get_all_values ( Command , TypeHooks ) of
case proplists : get_all_values ( Command , TypeHooks ) of
[ ] - >
[ ] - >
? DEBUG ( " \t {provider_hooks, []}. " , [ ] ) ,
State ;
State ;
HookProviders - >
HookProviders - >
rebar_paths : set_paths ( [ plugins ] , State ) ,
rebar_paths : set_paths ( [ plugins ] , State ) ,
Providers1 = rebar_state : providers ( State ) ,
Providers1 = rebar_state : providers ( State ) ,
State1 = rebar_state : providers ( rebar_state : dir ( State , Dir ) , Providers ++ Providers1 ) ,
State1 = rebar_state : providers ( rebar_state : dir ( State , Dir ) , Providers ++ Providers1 ) ,
? DEBUG ( " \t {provider_hooks, [{ ~p , ~p }]}. " ,
[ Type , HookProviders ] ) ,
case rebar_core : do ( HookProviders , State1 ) of
case rebar_core : do ( HookProviders , State1 ) of
{ error , ProviderName } - >
{ error , ProviderName } - >
? DEBUG ( format_error ( { bad_provider , Type , Command , ProviderName } ) , [ ] ) ,
? DEBUG ( format_error ( { bad_provider , Type , Command , ProviderName } ) , [ ] ) ,
@ -55,11 +72,6 @@ run_provider_hooks_(Dir, Type, Command, Providers, TypeHooks, State) ->
end
end
end .
end .
format_error ( { bad_provider , Type , Command , { Name , Namespace } } ) - >
io_lib : format ( " Unable to run ~ ts hooks for ' ~p ', command ' ~p ' in namespace ' ~p ' not found. " , [ Type , Command , Namespace , Name ] ) ;
format_error ( { bad_provider , Type , Command , Name } ) - >
io_lib : format ( " Unable to run ~ ts hooks for ' ~p ', command ' ~p ' not found. " , [ Type , Command , Name ] ) .
run_hooks ( Dir , pre , Command , Opts , State ) - >
run_hooks ( Dir , pre , Command , Opts , State ) - >
run_hooks ( Dir , pre_hooks , Command , Opts , State ) ;
run_hooks ( Dir , pre_hooks , Command , Opts , State ) ;
run_hooks ( Dir , post , Command , Opts , State ) - >
run_hooks ( Dir , post , Command , Opts , State ) - >
@ -67,17 +79,21 @@ run_hooks(Dir, post, Command, Opts, State) ->
run_hooks ( Dir , Type , Command , Opts , State ) - >
run_hooks ( Dir , Type , Command , Opts , State ) - >
case rebar_opts : get ( Opts , Type , [ ] ) of
case rebar_opts : get ( Opts , Type , [ ] ) of
[ ] - >
[ ] - >
? DEBUG ( " run_hooks( ~p , ~p , ~p ) -> no hooks defined \n " , [ Dir , Type , Command ] ) ,
? DEBUG ( " \t { ~p , []}. " , [ Type ] ) ,
? DIAGNOSTIC ( " run_hooks( ~p , ~p , ~p ) -> no hooks defined \n " , [ Dir , Type , Command ] ) ,
ok ;
ok ;
Hooks - >
Hooks - >
Env = rebar_env : create_env ( State , Opts ) ,
Env = rebar_env : create_env ( State , Opts ) ,
lists : foreach ( fun ( { _ , C , _ } = Hook ) when C =:= Command - >
apply_hook ( Dir , Env , Hook ) ;
( { C , _ } = Hook ) when C =:= Command - >
apply_hook ( Dir , Env , Hook ) ;
( _ ) - >
continue
end , Hooks )
CommandHooks = lists : filter (
fun ( { _ , C , _ } ) when C =:= Command - > true ;
( { C , _ } ) when C =:= Command - > true ;
( _ ) - > false
end ,
Hooks
) ,
? DEBUG ( " \t { ~p , ~p }. " ,
[ Type , CommandHooks ] ) ,
lists : foreach ( fun ( Hook ) - > apply_hook ( Dir , Env , Hook ) end , CommandHooks )
end .
end .
apply_hook ( Dir , Env , { Arch , Command , Hook } ) - >
apply_hook ( Dir , Env , { Arch , Command , Hook } ) - >