Bladeren bron

add an option to soft purge rather than purge old code

at the cost of some SASL warnings this prevents rebar3 from terminating
processes when reloading their code before running tests
pull/904/head
alisdair sullivan 9 jaren geleden
bovenliggende
commit
67bf54d04d
3 gewijzigde bestanden met toevoegingen van 12 en 10 verwijderingen
  1. +1
    -1
      src/rebar_prv_common_test.erl
  2. +1
    -1
      src/rebar_prv_eunit.erl
  3. +10
    -8
      src/rebar_utils.erl

+ 1
- 1
src/rebar_prv_common_test.erl Bestand weergeven

@ -38,7 +38,7 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) -> do(State) ->
?INFO("Running Common Test suites...", []), ?INFO("Running Common Test suites...", []),
rebar_utils:update_code(rebar_state:code_paths(State, all_deps)),
rebar_utils:update_code(rebar_state:code_paths(State, all_deps), [soft_purge]),
%% Run ct provider prehooks %% Run ct provider prehooks
Providers = rebar_state:providers(State), Providers = rebar_state:providers(State),

+ 1
- 1
src/rebar_prv_eunit.erl Bestand weergeven

@ -49,7 +49,7 @@ do(State) ->
do(State, Tests) -> do(State, Tests) ->
?INFO("Performing EUnit tests...", []), ?INFO("Performing EUnit tests...", []),
rebar_utils:update_code(rebar_state:code_paths(State, all_deps)),
rebar_utils:update_code(rebar_state:code_paths(State, all_deps), [soft_purge]),
%% Run eunit provider prehooks %% Run eunit provider prehooks
Providers = rebar_state:providers(State), Providers = rebar_state:providers(State),

+ 10
- 8
src/rebar_utils.erl Bestand weergeven

@ -47,6 +47,7 @@
deprecated/4, deprecated/4,
indent/1, indent/1,
update_code/1, update_code/1,
update_code/2,
remove_from_code_path/1, remove_from_code_path/1,
cleanup_code_path/1, cleanup_code_path/1,
args_to_tasks/1, args_to_tasks/1,
@ -644,7 +645,9 @@ indent(Amount) when erlang:is_integer(Amount) ->
%% Replace code paths with new paths for existing apps and %% Replace code paths with new paths for existing apps and
%% purge code of the old modules from those apps. %% purge code of the old modules from those apps.
update_code(Paths) ->
update_code(Paths) -> update_code(Paths, []).
update_code(Paths, Opts) ->
lists:foreach(fun(Path) -> lists:foreach(fun(Path) ->
Name = filename:basename(Path, "/ebin"), Name = filename:basename(Path, "/ebin"),
App = list_to_atom(Name), App = list_to_atom(Name),
@ -654,19 +657,18 @@ update_code(Paths) ->
code:add_patha(Path), code:add_patha(Path),
ok; ok;
{ok, Modules} -> {ok, Modules} ->
%% stick rebar ebin dir before purging to prevent
%% inadvertent termination
RebarBin = code:lib_dir(rebar, ebin),
ok = code:stick_dir(RebarBin),
%% replace_path causes problems when running %% replace_path causes problems when running
%% tests in projects like erlware_commons that rebar3 %% tests in projects like erlware_commons that rebar3
%% also includes %% also includes
%code:replace_path(App, Path), %code:replace_path(App, Path),
code:del_path(App), code:del_path(App),
code:add_patha(Path), code:add_patha(Path),
[begin code:purge(M), code:delete(M) end || M <- Modules],
%% unstick rebar dir
ok = code:unstick_dir(RebarBin)
case lists:member(soft_purge, Opts) of
true ->
[begin code:soft_purge(M), code:delete(M) end || M <- Modules];
false ->
[begin code:purge(M), code:delete(M) end || M <- Modules]
end
end end
end, Paths). end, Paths).

Laden…
Annuleren
Opslaan