Re-adding support for plugin modules

--HG--
extra : rebase_source : 90052500da62af1d32337f2d540acb39fdf67db4
This commit is contained in:
Dave Smith 2010-06-09 13:45:55 -06:00
parent a86cb0b4fa
commit 9dda9c2578

View file

@ -292,8 +292,12 @@ process_dir(Dir, ParentConfig, Command, DirSet) ->
%% caused it to change %% caused it to change
ok = file:set_cwd(Dir), 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 the current command on this directory
execute(Command, Modules, Config, ModuleSetFile), execute(Command, Modules ++ PluginModules, Config, ModuleSetFile),
%% Mark the current directory as processed %% Mark the current directory as processed
DirSet3 = sets:add_element(Dir, DirSet2), DirSet3 = sets:add_element(Dir, DirSet2),
@ -317,6 +321,7 @@ process_dir(Dir, ParentConfig, Command, DirSet) ->
end. end.
%% %%
%% Given a list of directories and a set of previously processed directories, %% Given a list of directories and a set of previously processed directories,
%% process each one we haven't seen yet %% 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) -> acc_modules([Module | Rest], Command, Config, File, Acc) ->
{ok, Dirs} = Module:Command(Config, File), {ok, Dirs} = Module:Command(Config, File),
acc_modules(Rest, Command, Config, File, Acc ++ Dirs). 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}.