mirror of
https://github.com/correl/rebar.git
synced 2024-12-18 03:00:17 +00:00
run plugins once, do not run as a preprocessor, add ebin to path early
This commit is contained in:
parent
89b57e3aa4
commit
124897e937
1 changed files with 37 additions and 10 deletions
|
@ -275,17 +275,17 @@ process_dir(Dir, ParentConfig, Commands) ->
|
||||||
%% type. These any_dir modules are processed FIRST.
|
%% type. These any_dir modules are processed FIRST.
|
||||||
{ok, AnyDirModules} = application:get_env(rebar, any_dir_modules),
|
{ok, AnyDirModules} = application:get_env(rebar, any_dir_modules),
|
||||||
|
|
||||||
%% Get the list of plug-in modules from rebar.config. These modules are
|
Modules = AnyDirModules ++ DirModules,
|
||||||
%% processed LAST.
|
|
||||||
{ok, PluginModules} = plugin_modules(Config),
|
|
||||||
|
|
||||||
Modules = AnyDirModules ++ DirModules ++ PluginModules,
|
|
||||||
|
|
||||||
%% Give the modules a chance to tweak config and indicate if there
|
%% Give the modules a chance to tweak config and indicate if there
|
||||||
%% are any other dirs that might need processing first.
|
%% are any other dirs that might need processing first.
|
||||||
{UpdatedConfig, Dirs} = acc_modules(select_modules(Modules, preprocess, []),
|
{UpdatedConfig, Dirs} = acc_modules(select_modules(Modules, preprocess, []),
|
||||||
preprocess, Config, ModuleSetFile, []),
|
preprocess, Config, ModuleSetFile, []),
|
||||||
?DEBUG("~s subdirs: ~p\n", [Dir, Dirs]),
|
?DEBUG("~s subdirs: ~p\n", [Dir, Dirs]),
|
||||||
|
|
||||||
|
%% Add ebin to path if this app has any plugins configured locally.
|
||||||
|
prep_plugin_modules(UpdatedConfig),
|
||||||
|
|
||||||
[process_dir(D, UpdatedConfig, Commands) || D <- Dirs],
|
[process_dir(D, UpdatedConfig, Commands) || D <- Dirs],
|
||||||
|
|
||||||
%% Make sure the CWD is reset properly; processing subdirs may have caused it
|
%% Make sure the CWD is reset properly; processing subdirs may have caused it
|
||||||
|
@ -303,9 +303,13 @@ process_dir(Dir, ParentConfig, Commands) ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
%% 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(UpdatedConfig),
|
||||||
|
|
||||||
%% Finally, process the current working directory
|
%% Finally, process the current working directory
|
||||||
?DEBUG("Commands: ~p Modules: ~p\n", [Commands, Modules]),
|
?DEBUG("Commands: ~p Modules: ~p Plugins: ~p\n", [Commands, Modules, PluginModules]),
|
||||||
apply_commands(Commands, Modules, UpdatedConfig, ModuleSetFile),
|
apply_commands(Commands, Modules ++ PluginModules, UpdatedConfig, ModuleSetFile),
|
||||||
|
|
||||||
%% Once we're all done processing, reset the code path to whatever
|
%% Once we're all done processing, reset the code path to whatever
|
||||||
%% the parent initialized it to
|
%% the parent initialized it to
|
||||||
|
@ -327,6 +331,17 @@ choose_module_set([{Fn, Modules} | Rest], Dir) ->
|
||||||
choose_module_set(Rest, Dir)
|
choose_module_set(Rest, Dir)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
%%
|
||||||
|
%% Add ebin to path if there are any local plugin modules for this app.
|
||||||
|
%%
|
||||||
|
prep_plugin_modules(Config) ->
|
||||||
|
case rebar_config:get_local(Config, rebar_plugins, []) of
|
||||||
|
[_H | _T] ->
|
||||||
|
code:add_path(filename:join([rebar_utils:get_cwd(), "ebin"]));
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
%% Return a flat list of rebar plugin modules.
|
%% Return a flat list of rebar plugin modules.
|
||||||
%%
|
%%
|
||||||
|
@ -334,10 +349,22 @@ plugin_modules(Config) ->
|
||||||
Modules = lists:flatten(rebar_config:get_all(Config, rebar_plugins)),
|
Modules = lists:flatten(rebar_config:get_all(Config, rebar_plugins)),
|
||||||
plugin_modules(Config, Modules).
|
plugin_modules(Config, Modules).
|
||||||
|
|
||||||
|
ulist(L) ->
|
||||||
|
ulist(L, sets:new(), []).
|
||||||
|
|
||||||
|
ulist([], _S, Acc) ->
|
||||||
|
lists:reverse(Acc);
|
||||||
|
ulist([H | T], S, Acc) ->
|
||||||
|
case sets:is_element(H, S) of
|
||||||
|
true ->
|
||||||
|
ulist(T, S, Acc);
|
||||||
|
false ->
|
||||||
|
ulist(T, sets:add_element(H, S), [H | Acc])
|
||||||
|
end.
|
||||||
|
|
||||||
plugin_modules(_Config, []) ->
|
plugin_modules(_Config, []) ->
|
||||||
{ok, []};
|
{ok, []};
|
||||||
plugin_modules(Config, Modules) ->
|
plugin_modules(_Config, Modules) ->
|
||||||
code:add_path(filename:join([rebar_utils:get_cwd(), "ebin"])),
|
|
||||||
FoundModules = [M || M <- Modules, code:which(M) =/= non_existing],
|
FoundModules = [M || M <- Modules, code:which(M) =/= non_existing],
|
||||||
case (Modules =:= FoundModules) of
|
case (Modules =:= FoundModules) of
|
||||||
true ->
|
true ->
|
||||||
|
@ -346,7 +373,7 @@ plugin_modules(Config, Modules) ->
|
||||||
?DEBUG("Missing plugins: ~p\n", [Modules -- FoundModules]),
|
?DEBUG("Missing plugins: ~p\n", [Modules -- FoundModules]),
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
{ok, FoundModules}.
|
{ok, ulist(FoundModules)}.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
%% Return .app file if the current directory is an OTP app
|
%% Return .app file if the current directory is an OTP app
|
||||||
|
|
Loading…
Reference in a new issue