@ -279,21 +279,26 @@ cover_compile(State, apps) ->
Apps = filter_checkouts ( rebar_state : project_apps ( State ) ) ,
AppDirs = app_dirs ( Apps ) ,
ExtraDirs = extra_src_dirs ( State , Apps ) ,
cover_compile ( State , AppDirs ++ ExtraDirs ) ;
cover_compile ( State , lists : filter ( fun ( D ) - > ec_file : is_dir ( D ) end , AppDirs ++ ExtraDirs ) ) ;
cover_compile ( State , Dirs ) - >
% % start the cover server if necessary
{ ok , CoverPid } = start_cover ( ) ,
% % redirect cover output
true = redirect_cover_output ( State , CoverPid ) ,
CompileResult = compile ( Dirs , [ ] ) ,
% % print any warnings about modules that failed to cover compile
lists : foreach ( fun print_cover_warnings / 1 , lists : flatten ( CompileResult ) ) .
compile ( [ ] , Acc ) - > lists : reverse ( Acc ) ;
compile ( [ Dir | Rest ] , Acc ) - >
? INFO ( " covering ~p " , [ Dir ] ) ,
Result = cover : compile_beam_directory ( Dir ) ,
compile ( Rest , [ Result | Acc ] ) .
lists : foreach ( fun ( Dir ) - >
? DEBUG ( " cover compiling ~p " , [ Dir ] ) ,
case catch ( cover : compile_beam_directory ( Dir ) ) of
{ error , eacces } - >
? WARN ( " Directory ~p not readable, modules will not be included in coverage " , [ Dir ] ) ;
{ error , enoent } - >
? WARN ( " Directory ~p not found " , [ Dir ] ) ;
{ 'EXIT' , { Reason , _ } } - >
? WARN ( " Cover compilation for directory ~p failed: ~p " , [ Dir , Reason ] ) ;
Results - >
% % print any warnings about modules that failed to cover compile
lists : foreach ( fun print_cover_warnings / 1 , lists : flatten ( Results ) )
end
end , Dirs ) .
app_dirs ( Apps ) - >
lists : foldl ( fun app_ebin_dirs / 2 , [ ] , Apps ) .
@ -302,7 +307,7 @@ app_ebin_dirs(App, Acc) ->
AppDir = rebar_app_info : ebin_dir ( App ) ,
ExtraDirs = rebar_dir : extra_src_dirs ( rebar_app_info : opts ( App ) , [ ] ) ,
OutDir = rebar_app_info : out_dir ( App ) ,
[ filename : join ( [ OutDir , D ] ) | | D < - [ AppDir | ExtraDirs ] ] ++ Acc .
[ AppDir ] ++ [ filename : join ( [ OutDir , D ] ) | | D < - ExtraDirs ] ++ Acc .
extra_src_dirs ( State , Apps ) - >
BaseDir = rebar_state : dir ( State ) ,
@ -339,9 +344,8 @@ redirect_cover_output(State, CoverPid) ->
group_leader ( F , CoverPid ) .
print_cover_warnings ( { ok , _ } ) - > ok ;
print_cover_warnings ( { error , File } ) - >
? WARN ( " Cover compilation of ~p failed, module is not included in cover data. " ,
[ File ] ) .
print_cover_warnings ( { error , Error } ) - >
? WARN ( " Cover compilation failed: ~p " , [ Error ] ) .
write_coverdata ( State , Task ) - >
DataDir = cover_dir ( State ) ,