diff options
author | crownedgrouse <[email protected]> | 2018-06-14 01:02:33 +0200 |
---|---|---|
committer | crownedgrouse <[email protected]> | 2018-06-14 22:23:54 +0200 |
commit | afee0fcc6a23da8ac31310606004fa42b6cf65a9 (patch) | |
tree | 7879ba1f23cd870cb385afccd83243e6b15ffb7c /lib/kernel/src/application_controller.erl | |
parent | bbb3d151e6329d58b34e526fefb6964677d93104 (diff) | |
download | otp-afee0fcc6a23da8ac31310606004fa42b6cf65a9.tar.gz otp-afee0fcc6a23da8ac31310606004fa42b6cf65a9.tar.bz2 otp-afee0fcc6a23da8ac31310606004fa42b6cf65a9.zip |
Included config files relative to sys.config dir
Change the way included config files are searched in sys.config.
Search first relative to sys.config directory, then relative
to current working directory, for backward compatibility.
This permit same result when using a sys.config file in a release
or starting manually a node with -config.
Credit to Siri Hansen for test case.
Diffstat (limited to 'lib/kernel/src/application_controller.erl')
-rw-r--r-- | lib/kernel/src/application_controller.erl | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/lib/kernel/src/application_controller.erl b/lib/kernel/src/application_controller.erl index 3b642f5873..abea329f84 100644 --- a/lib/kernel/src/application_controller.erl +++ b/lib/kernel/src/application_controller.erl @@ -1819,8 +1819,9 @@ check_conf() -> %% Therefore read and merge contents. if BFName =:= "sys" -> + DName = filename:dirname(FName), {ok, SysEnv, Errors} = - check_conf_sys(NewEnv), + check_conf_sys(NewEnv, [], [], DName), %% Report first error, if any, and %% terminate @@ -1842,20 +1843,31 @@ check_conf() -> end. check_conf_sys(Env) -> - check_conf_sys(Env, [], []). + check_conf_sys(Env, [], [], []). -check_conf_sys([File|T], SysEnv, Errors) when is_list(File) -> +check_conf_sys([File|T], SysEnv, Errors, DName) when is_list(File),is_list(DName) -> BFName = filename:basename(File, ".config"), FName = filename:join(filename:dirname(File), BFName ++ ".config"), - case load_file(FName) of + LName = case filename:pathtype(FName) of + relative when (DName =/= []) -> + % Check if relative to sys.config dir otherwise use legacy mode, + % i.e relative to cwd. + RName = filename:join(DName, FName), + case erl_prim_loader:read_file_info(RName) of + {ok, _} -> RName ; + error -> FName + end; + _ -> FName + end, + case load_file(LName) of {ok, NewEnv} -> - check_conf_sys(T, merge_env(SysEnv, NewEnv), Errors); + check_conf_sys(T, merge_env(SysEnv, NewEnv), Errors, DName); {error, {Line, _Mod, Str}} -> - check_conf_sys(T, SysEnv, [{error, {FName, Line, Str}}|Errors]) + check_conf_sys(T, SysEnv, [{error, {LName, Line, Str}}|Errors], DName) end; -check_conf_sys([Tuple|T], SysEnv, Errors) -> - check_conf_sys(T, merge_env(SysEnv, [Tuple]), Errors); -check_conf_sys([], SysEnv, Errors) -> +check_conf_sys([Tuple|T], SysEnv, Errors, DName) -> + check_conf_sys(T, merge_env(SysEnv, [Tuple]), Errors, DName); +check_conf_sys([], SysEnv, Errors, _) -> {ok, SysEnv, lists:reverse(Errors)}. load_file(File) -> |