Skip to content

Commit d685a78

Browse files
committed
Cleanup no longer present test suites from _build
1 parent ba50a08 commit d685a78

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

src/rebar_prv_common_test.erl

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ do(State) ->
4545
case compile(State, Tests) of
4646
%% successfully compiled apps
4747
{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),
4854
{RawOpts, _} = rebar_state:command_parsed_args(S),
4955
case proplists:get_value(compile_only, RawOpts, false) of
5056
true ->
@@ -86,6 +92,38 @@ do(State, Tests) ->
8692
Error
8793
end.
8894

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+
89127
run_tests(State, Opts) ->
90128
T = translate_paths(State, Opts),
91129
Opts1 = setup_logdir(State, T),

0 commit comments

Comments
 (0)