summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2016-04-04 14:01:47 -0400
committerFred Hebert <mononcqc@ferd.ca>2016-04-04 14:01:47 -0400
commit359d486c36cb2c41489b535e85412799a099c0cc (patch)
tree01d52de51919d0c3116ae4d21145ff2f550626ed /src
parent0be32c78f0f8849cf601afae9f9e14f9cf1de12c (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.erl17
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).