|
|
@ -271,11 +271,11 @@ maybe_boot_apps(State) -> |
|
|
|
case find_apps_to_boot(State) of |
|
|
|
undefined -> |
|
|
|
%% try to read in sys.config file |
|
|
|
ok = reread_config(State); |
|
|
|
ok = reread_config([], State); |
|
|
|
Apps -> |
|
|
|
%% load apps, then check config, then boot them. |
|
|
|
load_apps(Apps), |
|
|
|
ok = reread_config(State), |
|
|
|
ok = reread_config(Apps, State), |
|
|
|
boot_apps(Apps) |
|
|
|
end. |
|
|
|
|
|
|
@ -340,11 +340,36 @@ load_apps(Apps) -> |
|
|
|
not lists:keymember(App, 1, application:loaded_applications())], |
|
|
|
ok. |
|
|
|
|
|
|
|
reread_config(State) -> |
|
|
|
reread_config(AppsToStart, State) -> |
|
|
|
case find_config(State) of |
|
|
|
no_config -> |
|
|
|
ok; |
|
|
|
ConfigList -> |
|
|
|
%% This allows people who use applications that are also |
|
|
|
%% depended on by rebar3 or its plugins to change their |
|
|
|
%% configuration at runtime based on the configuration files. |
|
|
|
%% |
|
|
|
%% To do this, we stop apps that are already started before |
|
|
|
%% reloading their configuration. |
|
|
|
%% |
|
|
|
%% We make an exception for apps that: |
|
|
|
%% - are not already running |
|
|
|
%% - would not be restarted (and hence would break some |
|
|
|
%% compatibility with rebar3) |
|
|
|
%% - are not in the config files and would see no config |
|
|
|
%% changes |
|
|
|
%% - are not in a blacklist, where changing their config |
|
|
|
%% would be risky to the shell or the rebar3 agent |
|
|
|
%% functionality (i.e. changing inets may break proxy |
|
|
|
%% settings, stopping `kernel' would break everything) |
|
|
|
Running = [App || {App, _, _} <- application:which_applications()], |
|
|
|
BlackList = [inets, stdlib, kernel, rebar], |
|
|
|
_ = [application:stop(App) |
|
|
|
|| Config <- ConfigList, |
|
|
|
{App, _} <- Config, |
|
|
|
lists:member(App, Running), |
|
|
|
lists:member(App, AppsToStart), |
|
|
|
not lists:member(App, BlackList)], |
|
|
|
_ = rebar_utils:reread_config(ConfigList), |
|
|
|
ok |
|
|
|
end. |
|
|
|