|
@@ -26,7 +26,7 @@ parse_applist(AppList) ->
|
|
|
Res = string:tokens(string:strip(string:strip(binary_to_list(AppList),right,$]),left,$[),","),
|
|
|
[ list_to_atom(R) || R <-Res ] -- disabled().
|
|
|
|
|
|
-load_config() ->
|
|
|
+load_sysconfig() ->
|
|
|
Config = wildcards(["sys.config",lists:concat(["etc/",mad:host(),"/sys.config"])]),
|
|
|
_Apps = case Config of
|
|
|
[] -> case mad_repl:load_file("sys.config") of
|
|
@@ -34,25 +34,38 @@ load_config() ->
|
|
|
{ok,Bin} -> parse(unicode:characters_to_list(Bin)) end;
|
|
|
File -> case file:consult(hd(File)) of
|
|
|
{error,_} -> [];
|
|
|
- {ok,[A]} -> A end end.
|
|
|
+ {ok,[A]} -> merge_include(A, []) end end.
|
|
|
|
|
|
-load_config(AppConfigs,[]) ->
|
|
|
- [ [ application:set_env(App,K,V) || {K,V} <- Cfg] || {App,Cfg} <- AppConfigs],
|
|
|
- load_includes(AppConfigs).
|
|
|
+load_sysconfig(AppConfigs) ->
|
|
|
+ [[application:set_env(App,K,V) || {K,V} <- Cfg] || {App,Cfg} <- AppConfigs].
|
|
|
|
|
|
-load_includes(AppConfigs) ->
|
|
|
- [ begin Apps = case file:consult(File) of
|
|
|
- {error,_} -> [];
|
|
|
- {ok,[A]} -> A end,
|
|
|
- load_config(Apps, []) end || File <- AppConfigs, is_list(File) ].
|
|
|
+merge_include([], Acc) -> Acc;
|
|
|
+merge_include([H | Rest], Acc) -> merge_include(Rest, merge_config(H, Acc)).
|
|
|
+
|
|
|
+merge_config({App, NewConfig} = Add, Acc) ->
|
|
|
+ lists:keystore(App, 1, Acc, case lists:keyfind(App, 1, Acc) of
|
|
|
+ false -> Add;
|
|
|
+ {App, AppConfigs} -> merge_config(App, AppConfigs, NewConfig)
|
|
|
+ end);
|
|
|
+
|
|
|
+merge_config(File, Acc) when is_list(File) ->
|
|
|
+ BFName = filename:basename(File, ".config"),
|
|
|
+ FName = filename:join(filename:dirname(File), BFName ++ ".config"),
|
|
|
+ case file:consult(FName) of
|
|
|
+ {ok,[A]} -> merge_include(A, Acc);
|
|
|
+ _ -> Acc
|
|
|
+ end.
|
|
|
+
|
|
|
+merge_config(App, AppConfigs, []) -> {App, AppConfigs};
|
|
|
+merge_config(App, AppConfigs, [{Key, _} = Tuple | Rest]) ->
|
|
|
+ merge_config(App, lists:keystore(Key, 1, AppConfigs, Tuple), Rest).
|
|
|
|
|
|
acc_start(A,Acc) ->
|
|
|
application:ensure_all_started(A), Acc.
|
|
|
|
|
|
% for system application we just start, forgot about env merging
|
|
|
|
|
|
-load(true,A,Acc,Config) ->
|
|
|
- load_config(Config,[]),
|
|
|
+load(true,A,Acc,_Config) ->
|
|
|
acc_start(A,Acc);
|
|
|
|
|
|
% for user application we should merge app from ebin and from sys.config
|
|
@@ -87,7 +100,8 @@ sh(Params) ->
|
|
|
code:set_path(SystemPath++UserPath),
|
|
|
code:add_path(filename:join([cwd(),filename:basename(escript:script_name())])),
|
|
|
load(),
|
|
|
- Config = load_config(),
|
|
|
+ Config = load_sysconfig(),
|
|
|
+ load_sysconfig(Config),
|
|
|
Driver = mad_utils:get_value(shell_driver,_Config,user_drv),
|
|
|
repl_intro(Config),
|
|
|
case os:type() of
|