summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_prv_cover.erl30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/rebar_prv_cover.erl b/src/rebar_prv_cover.erl
index 45d5b81..13c12d1 100644
--- a/src/rebar_prv_cover.erl
+++ b/src/rebar_prv_cover.erl
@@ -14,7 +14,7 @@
-include("rebar.hrl").
-define(PROVIDER, cover).
--define(DEPS, []).
+-define(DEPS, [app_discovery]).
%% ===================================================================
%% Public API
@@ -136,14 +136,25 @@ import(CoverData) ->
end.
analysis(State, Task) ->
+ OldPath = code:get_path(),
+ ok = restore_cover_paths(State),
Mods = cover:imported_modules(),
- lists:map(
- fun(Mod) ->
- {ok, Answer} = cover:analyze(Mod, coverage, line),
- {ok, File} = analyze_to_file(Mod, State, Task),
- {Mod, process(Answer), File}
- end,
- Mods).
+ Analysis = lists:map(fun(Mod) ->
+ {ok, Answer} = cover:analyze(Mod, coverage, line),
+ {ok, File} = analyze_to_file(Mod, State, Task),
+ {Mod, process(Answer), File}
+ end,
+ Mods),
+ true = code:set_path(OldPath),
+ Analysis.
+
+restore_cover_paths(State) ->
+ lists:foreach(fun(App) ->
+ AppDir = rebar_app_info:out_dir(App),
+ _ = code:add_path(filename:join([AppDir, "ebin"]))
+ end, rebar_state:project_apps(State)),
+ _ = code:add_path(filename:join([rebar_dir:base_dir(State), "ebin"])),
+ ok.
analyze_to_file(Mod, State, Task) ->
CoverDir = cover_dir(State),
@@ -320,8 +331,7 @@ write_coverdata(State, Task) ->
ExportFile = filename:join([DataDir, atom_to_list(Task) ++ ".coverdata"]),
case cover:export(ExportFile) of
ok ->
- ?DEBUG("Cover data written to ~p.", [ExportFile]),
- ok;
+ ?DEBUG("Cover data written to ~p.", [ExportFile]);
{error, Reason} ->
?WARN("Cover data export failed: ~p", [Reason])
end.