Преглед на файлове

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 години
родител
ревизия
67bf54d04d
променени са 3 файла, в които са добавени 12 реда и са изтрити 10 реда
  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 Целия файл

@ -38,7 +38,7 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
?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
Providers = rebar_state:providers(State),

+ 1
- 1
src/rebar_prv_eunit.erl Целия файл

@ -49,7 +49,7 @@ do(State) ->
do(State, 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
Providers = rebar_state:providers(State),

+ 10
- 8
src/rebar_utils.erl Целия файл

@ -47,6 +47,7 @@
deprecated/4,
indent/1,
update_code/1,
update_code/2,
remove_from_code_path/1,
cleanup_code_path/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
%% 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) ->
Name = filename:basename(Path, "/ebin"),
App = list_to_atom(Name),
@ -654,19 +657,18 @@ update_code(Paths) ->
code:add_patha(Path),
ok;
{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
%% tests in projects like erlware_commons that rebar3
%% also includes
%code:replace_path(App, Path),
code:del_path(App),
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, Paths).

Зареждане…
Отказ
Запис