소스 검색

Blacklist apps to reload

When an app contains one of the modules we can't afford to get upgraded
without breakage (i.e. erlware_commons, providers, getopt), skip
reloading that application from the rebar3 agent, such that it can keep
on working in subsequent calls.

Blacklisted:

- erlware_commons (broke on ec_cmd_log)
- providers (core to functionality)
- cf (useful to not explode on colors)
- cth_readable (only used for CT suites, but incompatibilities may break
  whole runs)
pull/1147/head
Fred Hebert 9 년 전
부모
커밋
359d486c36
1개의 변경된 파일12개의 추가작업 그리고 5개의 파일을 삭제
  1. +12
    -5
      src/rebar_agent.erl

+ 12
- 5
src/rebar_agent.erl 파일 보기

@ -86,6 +86,8 @@ refresh_paths(RState) ->
|| App <- rebar_state:project_apps(RState)]
%% make sure to never reload self; halt()s the VM
) -- [filename:dirname(code:which(?MODULE))],
%% Modules from apps we can't reload without breaking functionality
Blacklist = [ec_cmd_log, providers, cf, cth_readable],
%% Similar to rebar_utils:update_code/1, but also forces a reload
%% of used modules. Also forces to reload all of ebin/ instead
%% of just the modules in the .app file, because 'extra_src_dirs'
@ -102,11 +104,16 @@ refresh_paths(RState) ->
undefined ->
code:add_patha(Path),
ok;
{ok, _} ->
?DEBUG("reloading ~p from ~s", [Modules, Path]),
code:replace_path(App, Path),
[begin code:purge(M), code:delete(M), code:load_file(M) end
|| M <- Modules]
{ok, Mods} ->
case {length(Mods), length(Mods -- Blacklist)} of
{X,X} ->
?DEBUG("reloading ~p from ~s", [Modules, Path]),
code:replace_path(App, Path),
[begin code:purge(M), code:delete(M), code:load_file(M) end
|| M <- Modules];
{_,_} ->
?DEBUG("skipping app ~p, stable copy required", [App])
end
end
end, ToRefresh).

불러오는 중...
취소
저장