diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rebar_core.erl | 38 | 
1 files changed, 22 insertions, 16 deletions
| diff --git a/src/rebar_core.erl b/src/rebar_core.erl index 61e8412..fcfa62a 100644 --- a/src/rebar_core.erl +++ b/src/rebar_core.erl @@ -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. | 
