@ -533,21 +533,7 @@ plugin_modules(Config, PredirsAssoc, FoundModules, MissingModules) ->
load_plugin_modules ( Config , PredirsAssoc , Modules ) - >
Cwd = rebar_utils : get_cwd ( ) ,
PluginDirs = case rebar_config : get_local ( Config , plugin_dir , undefined ) of
undefined - >
% Plugin can be in the project ' s " plugins " folder
[ filename : join ( Cwd , " plugins " ) ] ;
Dir - >
[ Dir ]
end ++
% We also want to include this case :
% Plugin can be in " plugins " directory of the plugin base directory . For
% example , Cwd depends on Plugin , and deps / Plugin / plugins / Plugin . erl is the
% plugin .
[
filename : join ( Dir , " plugins " ) | |
Dir < - get_plugin_base_dirs ( Cwd , PredirsAssoc )
] ,
PluginDirs = get_all_plugin_dirs ( Config , Cwd , PredirsAssoc ) ,
% % Find relevant sources in base_dir and plugin_dir
Erls = string : join ( [ atom_to_list ( M ) ++ " \\ .erl " | | M < - Modules ] , " | " ) ,
@ -562,12 +548,32 @@ load_plugin_modules(Config, PredirsAssoc, Modules) ->
NotLoaded = [ V | | V < - Modules , FilterMissing ( V ) ] ,
{ Loaded , NotLoaded } .
get_all_plugin_dirs ( Config , Cwd , PredirsAssoc ) - >
get_plugin_dir ( Config , Cwd ) ++ get_base_plugin_dirs ( Cwd , PredirsAssoc ) .
get_plugin_dir ( Config , Cwd ) - >
case rebar_config : get_local ( Config , plugin_dir , undefined ) of
undefined - >
% % Plugin can be in the project ' s " plugins " folder
[ filename : join ( Cwd , " plugins " ) ] ;
Dir - >
[ Dir ]
end .
% % We also want to include this case :
% % Plugin can be in " plugins " directory of the plugin base directory .
% % For example , Cwd depends on Plugin , and deps / Plugin / plugins / Plugin . erl
% % is the plugin .
get_base_plugin_dirs ( Cwd , PredirsAssoc ) - >
[ filename : join ( Dir , " plugins " ) | |
Dir < - get_plugin_base_dirs ( Cwd , PredirsAssoc ) ] .
% % @ doc PredirsAssoc is a dictionary of plugindir - > 'parent' pairs
% % 'parent' in this case depends on plugin ; therefore we have to give
% % all plugins that Cwd ( 'parent' in this case ) depends on .
get_plugin_base_dirs ( Cwd , PredirsAssoc ) - >
[ PluginDir | | { PluginDir , Master } < - dict : to_list ( PredirsAssoc ) ,
Master =:= Cwd ] .
Master =:= Cwd ] .
is_missing_plugin ( Loaded ) - >
fun ( Mod ) - > not lists : member ( Mod , Loaded ) end .