diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2016-04-04 14:01:47 -0400 |
---|---|---|
committer | Fred Hebert <mononcqc@ferd.ca> | 2016-04-04 14:01:47 -0400 |
commit | 359d486c36cb2c41489b535e85412799a099c0cc (patch) | |
tree | 01d52de51919d0c3116ae4d21145ff2f550626ed /src | |
parent | 0be32c78f0f8849cf601afae9f9e14f9cf1de12c (diff) |
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)
Diffstat (limited to 'src')
-rw-r--r-- | src/rebar_agent.erl | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/rebar_agent.erl b/src/rebar_agent.erl index 2b69812..95818d8 100644 --- a/src/rebar_agent.erl +++ b/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). |