diff options
author | Eric <[email protected]> | 2012-12-10 15:03:49 -0500 |
---|---|---|
committer | Eric <[email protected]> | 2012-12-10 15:07:24 -0500 |
commit | 902d2f4718f4eec674252cb5643c0dd137d741e0 (patch) | |
tree | 83dc520dbc2910a152e2d0d9ba7170444891d31d | |
parent | 4d21d2576afead307717d8f61a3904826f8df0e6 (diff) | |
download | relx-902d2f4718f4eec674252cb5643c0dd137d741e0.tar.gz relx-902d2f4718f4eec674252cb5643c0dd137d741e0.tar.bz2 relx-902d2f4718f4eec674252cb5643c0dd137d741e0.zip |
support a setable root directory for the system
-rw-r--r-- | src/rcl_state.erl | 15 | ||||
-rw-r--r-- | src/relcool.erl | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 7397e6f..d324bf9 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -35,6 +35,8 @@ providers/2, sys_config/1, sys_config/2, + root_dir/1, + root_dir/2, add_release/2, get_release/3, update_release/2, @@ -57,6 +59,7 @@ cmd_args/0]). -record(state_t, {log :: rcl_log:t(), + root_dir :: file:name(), caller :: caller(), output_dir :: file:name(), lib_dirs=[] :: [file:name()], @@ -90,9 +93,10 @@ %% @doc Create a new 'log level' for the system -spec new(proplists:proplist(), [file:filename()] | file:filename()) -> t(). new(PropList, Targets) when erlang:is_list(PropList) -> + {ok, Root} = file:get_cwd(), State0 = #state_t{log = proplists:get_value(log, PropList, rcl_log:new(error)), - output_dir=filename:absname(proplists:get_value(output_dir, PropList, "")), + output_dir=proplists:get_value(output_dir, PropList, ""), lib_dirs=get_lib_dirs(proplists:get_value(lib_dirs, PropList, [])), config_files=process_config_files(Targets), goals=proplists:get_value(goals, PropList, []), @@ -100,6 +104,7 @@ new(PropList, Targets) when erlang:is_list(PropList) -> releases=ec_dictionary:new(ec_dict), config_values=ec_dictionary:new(ec_dict), overrides = proplists:get_value(overrides, PropList, []), + root_dir = proplists:get_value(root_dir, PropList, Root), default_release={proplists:get_value(relname, PropList, undefined), proplists:get_value(relvsn, PropList, undefined)}}, create_logic_providers(State0). @@ -147,6 +152,14 @@ sys_config(#state_t{sys_config=SysConfig}) -> sys_config(State, SysConfig) -> State#state_t{sys_config=SysConfig}. +-spec root_dir(t()) -> file:filename() | undefined. +root_dir(#state_t{root_dir=RootDir}) -> + RootDir. + +-spec root_dir(t(), file:filename()) -> t(). +root_dir(State, RootDir) -> + State#state_t{root_dir=RootDir}. + -spec providers(t(), [rcl_provider:t()]) -> t(). providers(M, NewProviders) -> M#state_t{providers=NewProviders}. diff --git a/src/relcool.erl b/src/relcool.erl index d5ddbc5..c6747ca 100644 --- a/src/relcool.erl +++ b/src/relcool.erl @@ -126,6 +126,8 @@ run_providers(State0) -> Err = {error, _} -> Err; {ok, State1} -> + RootDir = rcl_state:root_dir(State1), + ok = file:set_cwd(RootDir), Providers = rcl_state:providers(State1), Result = run_providers(ConfigProvider, Providers, State1), handle_output(State1, rcl_state:caller(State1), Result) |