summaryrefslogtreecommitdiff
path: root/src/rebar_state.erl
diff options
context:
space:
mode:
authorTristan Sloughter <t@crashfast.com>2014-09-18 19:14:33 -0500
committerTristan Sloughter <t@crashfast.com>2014-09-18 19:15:34 -0500
commitd78f66291f0f82b6c50193b041c7a26b4ced9037 (patch)
tree972f2b9061e17f24c392b8c1e9a60ef2998280a2 /src/rebar_state.erl
parent73ee56eace71065ff7fa15f0106c2f559a6e632b (diff)
add support for plugins as pre and post hooks
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r--src/rebar_state.erl13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl
index fa9aa96..706c528 100644
--- a/src/rebar_state.erl
+++ b/src/rebar_state.erl
@@ -14,6 +14,7 @@
binary_deps/1, binary_deps/2,
src_deps/1, src_deps/2,
+ prepend_hook/3, append_hook/3, hooks/2,
providers/1, providers/2, add_provider/2]).
-include("rebar.hrl").
@@ -39,6 +40,7 @@
project_apps = ordsets:new() :: ordsets:ordset(rebar_app_info:t()),
providers = [],
+ hooks = [],
skip_dirs = new_skip_dirs() :: rebar_dict() }).
-export_type([t/0]).
@@ -160,6 +162,17 @@ create_logic_providers(ProviderModules, State0) ->
State1
end, State0, ProviderModules).
+prepend_hook(State=#state_t{hooks=Hooks}, Target, Hook) ->
+ {PreHooks, PostHooks} = proplists:get_value(Target, Hooks, {[], []}),
+ State#state_t{hooks=[{Target, {[Hook | PreHooks], PostHooks}} | proplists:delete(Target, Hooks)]}.
+
+append_hook(State=#state_t{hooks=Hooks}, Target, Hook) ->
+ {PreHooks, PostHooks} = proplists:get_value(Target, Hooks, {[], []}),
+ State#state_t{hooks=[{Target, {PreHooks, [Hook | PostHooks]}} | proplists:delete(Target, Hooks)]}.
+
+hooks(#state_t{hooks=Hooks}, Target) ->
+ proplists:get_value(Target, Hooks, {[], []}).
+
%% ===================================================================
%% Internal functions
%% ===================================================================