From 9dda9c2578877c1f437d88d5995554f957f47c08 Mon Sep 17 00:00:00 2001 From: Dave Smith Date: Wed, 9 Jun 2010 13:45:55 -0600 Subject: Re-adding support for plugin modules --HG-- extra : rebase_source : 90052500da62af1d32337f2d540acb39fdf67db4 --- src/rebar_core.erl | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/rebar_core.erl b/src/rebar_core.erl index 8177c43..6a825d6 100644 --- a/src/rebar_core.erl +++ b/src/rebar_core.erl @@ -292,8 +292,12 @@ process_dir(Dir, ParentConfig, Command, DirSet) -> %% caused it to change ok = file:set_cwd(Dir), + %% Get the list of plug-in modules from rebar.config. These modules are + %% processed LAST and do not participate in preprocess. + {ok, PluginModules} = plugin_modules(Config), + %% Execute the current command on this directory - execute(Command, Modules, Config, ModuleSetFile), + execute(Command, Modules ++ PluginModules, Config, ModuleSetFile), %% Mark the current directory as processed DirSet3 = sets:add_element(Dir, DirSet2), @@ -317,6 +321,7 @@ process_dir(Dir, ParentConfig, Command, DirSet) -> end. + %% %% Given a list of directories and a set of previously processed directories, %% process each one we haven't seen yet @@ -443,3 +448,36 @@ acc_modules([], _Command, _Config, _File, Acc) -> acc_modules([Module | Rest], Command, Config, File, Acc) -> {ok, Dirs} = Module:Command(Config, File), acc_modules(Rest, Command, Config, File, Acc ++ Dirs). + +%% +%% Return a flat list of rebar plugin modules. +%% +plugin_modules(Config) -> + Modules = lists:flatten(rebar_config:get_all(Config, rebar_plugins)), + plugin_modules(Config, ulist(Modules)). + +ulist(L) -> + ulist(L, []). + +ulist([], Acc) -> + lists:reverse(Acc); +ulist([H | T], Acc) -> + case lists:is_member(H, Acc) of + true -> + ulist(T, Acc); + false -> + ulist(T, [H | Acc]) + end. + +plugin_modules(_Config, []) -> + {ok, []}; +plugin_modules(_Config, Modules) -> + FoundModules = [M || M <- Modules, code:which(M) =/= non_existing], + case (Modules =:= FoundModules) of + true -> + ok; + false -> + ?WARN("Missing plugins: ~p\n", [Modules -- FoundModules]), + ok + end, + {ok, FoundModules}. -- cgit v1.1