@@ -45,6 +45,12 @@ do(State) ->
45
45
case compile (State , Tests ) of
46
46
% % successfully compiled apps
47
47
{ok , S } ->
48
+ {ok , T } = Tests ,
49
+ TestSources = proplists :get_value (dir , T ),
50
+ AllDeps = rebar_state :code_paths (S , all_deps ),
51
+ IsTestDir = fun (Path ) -> string :slice (Path , length (Path ) - 4 , 4 ) == " test" end ,
52
+ CompiledTestsDirs = lists :filter (IsTestDir , AllDeps ),
53
+ cleanup_unused_test_files (CompiledTestsDirs , TestSources ),
48
54
{RawOpts , _ } = rebar_state :command_parsed_args (S ),
49
55
case proplists :get_value (compile_only , RawOpts , false ) of
50
56
true ->
@@ -86,6 +92,38 @@ do(State, Tests) ->
86
92
Error
87
93
end .
88
94
95
+ cleanup_unused_test_files (CompiledTestsDirs , TestSources ) ->
96
+ GetModulesFun = fun (Dir , Acc ) ->
97
+ Suites = rebar_utils :find_files (Dir , " .*_SUITE\. erl\$ " , false ),
98
+ Modules = sets :from_list (lists :map (fun rebar_utils :erl_to_mod /1 , Suites )),
99
+ sets :union (Acc , Modules )
100
+ end ,
101
+ PresentTestModules = lists :foldl (GetModulesFun , sets :new (), TestSources ),
102
+ CleanupFun = fun (Dir ) ->
103
+ cleanup_unused_test_files_dir (Dir , PresentTestModules )
104
+ end ,
105
+ lists :foreach (CleanupFun , CompiledTestsDirs ).
106
+
107
+ cleanup_unused_test_files_dir (Dir , PresentTestModules ) ->
108
+ Mapping = create_module_to_files_mapping (Dir ),
109
+ RemoveFun = fun (Module , {SrcPath , BeamPath }) ->
110
+ case sets :is_element (Module , PresentTestModules ) of
111
+ true -> ok ;
112
+ false -> file :delete (SrcPath ), file :delete (BeamPath )
113
+ end
114
+ end ,
115
+ _ = maps :map (RemoveFun , Mapping ),
116
+ ok .
117
+
118
+ create_module_to_files_mapping (Dir ) ->
119
+ SrcFiles = rebar_utils :find_files (Dir , " .*_SUITE\. erl\$ " , false ),
120
+ MappingFun = fun (SrcFile , Acc ) ->
121
+ Module = rebar_utils :erl_to_mod (SrcFile ),
122
+ BeamFile = filename :join ([Dir , Module ]) ++ " .beam" ,
123
+ Acc #{Module => {SrcFile , BeamFile }}
124
+ end ,
125
+ lists :foldl (MappingFun , #{}, SrcFiles ).
126
+
89
127
run_tests (State , Opts ) ->
90
128
T = translate_paths (State , Opts ),
91
129
Opts1 = setup_logdir (State , T ),
0 commit comments