diff options
| author | Tim Watson <watson.timothy@gmail.com> | 2011-05-23 12:46:03 +0100 | 
|---|---|---|
| committer | Tim Watson <watson.timothy@gmail.com> | 2011-05-23 12:46:03 +0100 | 
| commit | c07b0954ebac6913dba82b3e81bca7f7a39d8293 (patch) | |
| tree | b663afe1773a0190318ea7185a6f6f8d119968a5 /src | |
| parent | 892dc48a860892b3eeb36e519287c26f09fff5b8 (diff) | |
Allow plugins to run before/after a rebar command.
This patch makes a small change in rebar_core that checks the list
of valid plugins to see if any of them export a pre/post processing
function for the current command. This logic is applied only to the
plugins and allows plugin authors to hook into rebar's execution by
using a naming convention that matches the one used for scripting hooks.
Example:
```erlang
-module(my_rebar_plugin).
-export([pre_compile/2]).
pre_compile(Config, AppFile) ->
    rebar_log:log(debug, "PRECOMPILE: ~p:~p~n",
                  [AppFile, Config]),
    ok.
```
Diffstat (limited to 'src')
| -rw-r--r-- | src/rebar_core.erl | 21 | 
1 files changed, 20 insertions, 1 deletions
| diff --git a/src/rebar_core.erl b/src/rebar_core.erl index f17ed0b..cb2c508 100644 --- a/src/rebar_core.erl +++ b/src/rebar_core.erl @@ -148,9 +148,17 @@ process_dir(Dir, ParentConfig, Command, DirSet) ->                      %% in preprocess.                      {ok, PluginModules} = plugin_modules(Config), +                    %% Execute any before_command plugins on this directory +                    execute_pre(Command, PluginModules, +                                Config, ModuleSetFile), +                      %% Execute the current command on this directory                      execute(Command, Modules ++ PluginModules, -                            Config, ModuleSetFile) +                            Config, ModuleSetFile), + +                    %% Execute any after_command plugins on this directory +                    execute_post(Command, PluginModules, +                                 Config, ModuleSetFile)              end,              %% Mark the current directory as processed @@ -215,6 +223,17 @@ is_dir_type(rel_dir, Dir) ->  is_dir_type(_, _) ->      false. +execute_pre(Command, Modules, Config, ModuleFile) -> +    execute_plugin_hook("pre_", Command, Modules, +                        Config, ModuleFile). + +execute_post(Command, Modules, Config, ModuleFile) -> +    execute_plugin_hook("post_", Command, Modules, +                        Config, ModuleFile). + +execute_plugin_hook(Hook, Command, Modules, Config, ModuleFile) -> +    HookFunction = list_to_atom(Hook ++ atom_to_list(Command)), +    execute(HookFunction, Modules, Config, ModuleFile).  %%  %% Execute a command across all applicable modules | 
