From 34816ad8dc9061e5061ab496c284ebfdef4f3004 Mon Sep 17 00:00:00 2001
From: alisdair sullivan <alisdair.sullivan@askuity.com>
Date: Fri, 11 Sep 2015 10:27:51 -0700
Subject: cover compile beams compiled for ct/eunit seperately from beams
 compiled otherwise

fixes #788
---
 src/rebar_prv_common_test.erl |  1 +
 src/rebar_prv_cover.erl       | 39 +++++++++++++++++++--------------------
 2 files changed, 20 insertions(+), 20 deletions(-)

(limited to 'src')

diff --git a/src/rebar_prv_common_test.erl b/src/rebar_prv_common_test.erl
index d3fb143..9155d3b 100644
--- a/src/rebar_prv_common_test.erl
+++ b/src/rebar_prv_common_test.erl
@@ -91,6 +91,7 @@ run_test(State) ->
 
 run_test(State, Opts) ->
     {RawOpts, _} = rebar_state:command_parsed_args(State),
+    ok = rebar_prv_cover:maybe_cover_compile(State, apps),
     Result = case proplists:get_value(verbose, RawOpts, false) of
         true  -> run_test_verbose(Opts);
         false -> run_test_quiet(Opts)
diff --git a/src/rebar_prv_cover.erl b/src/rebar_prv_cover.erl
index 8c26521..fc7457e 100644
--- a/src/rebar_prv_cover.erl
+++ b/src/rebar_prv_cover.erl
@@ -44,12 +44,12 @@ do(State) ->
 
 -spec maybe_cover_compile(rebar_state:t()) -> ok.
 maybe_cover_compile(State) ->
-    maybe_cover_compile(State, []).
+    maybe_cover_compile(State, apps).
 
--spec maybe_cover_compile(rebar_state:t(), [file:name()]) -> ok.
-maybe_cover_compile(State, ExtraDirs) ->
+-spec maybe_cover_compile(rebar_state:t(), [file:name()] | apps) -> ok.
+maybe_cover_compile(State, Dirs) ->
     case rebar_state:get(State, cover_enabled, false) of
-        true  -> cover_compile(State, ExtraDirs);
+        true  -> cover_compile(State, Dirs);
         false -> ok
     end.
 
@@ -275,17 +275,23 @@ strip_coverdir(File) ->
     filename:join(lists:reverse(lists:sublist(lists:reverse(filename:split(File)),
                                               2))).
 
-cover_compile(State, ExtraDirs) ->
+cover_compile(State, apps) ->
+    Apps = filter_checkouts(rebar_state:project_apps(State)),
+    AppDirs = app_ebin_dirs(Apps, []),
+    cover_compile(State, AppDirs);
+cover_compile(State, Dirs) ->
     %% start the cover server if necessary
     {ok, CoverPid} = start_cover(),
     %% redirect cover output
     true = redirect_cover_output(State, CoverPid),
-    %% cover compile the modules we just compiled
-    Apps = filter_checkouts(rebar_state:project_apps(State)),
-    CompileResult = compile_beam_directories(Apps, []) ++
-                    compile_extras(ExtraDirs, []),
+    CompileResult = compile(Dirs, []),
     %% print any warnings about modules that failed to cover compile
-    lists:foreach(fun print_cover_warnings/1, CompileResult).
+    lists:foreach(fun print_cover_warnings/1, lists:flatten(CompileResult)).
+
+compile([], Acc) -> lists:reverse(Acc);
+compile([Dir|Rest], Acc) ->
+    Result = cover:compile_beam_directory(Dir),
+    compile(Rest, [Result|Acc]).
 
 filter_checkouts(Apps) -> filter_checkouts(Apps, []).
 
@@ -296,16 +302,9 @@ filter_checkouts([App|Rest], Acc) ->
         false -> filter_checkouts(Rest, [App|Acc])
     end.
 
-compile_beam_directories([], Acc) -> Acc;
-compile_beam_directories([App|Rest], Acc) ->
-    Result = cover:compile_beam_directory(filename:join([rebar_app_info:out_dir(App),
-                                                        "ebin"])),
-    compile_beam_directories(Rest, Acc ++ Result).
-
-compile_extras([], Acc) -> Acc;
-compile_extras([Dir|Rest], Acc) ->
-    Result = cover:compile_beam_directory(Dir),
-    compile_extras(Rest, Acc ++ Result).
+app_ebin_dirs([], Acc) -> Acc;
+app_ebin_dirs([App|Rest], Acc) ->
+    app_ebin_dirs(Rest, [rebar_app_info:ebin_dir(App)|Acc]).
 
 start_cover() ->
     case cover:start() of
-- 
cgit v1.1