diff options
author | Eric <[email protected]> | 2013-10-15 10:28:20 -0700 |
---|---|---|
committer | Eric <[email protected]> | 2013-10-15 13:22:24 -0700 |
commit | 51b7508737fd7668d000781c6502361e132cbbc4 (patch) | |
tree | 395c66c9be2e2b2c0f092ad4e445133a0c3897d2 /src/rlx_prv_assembler.erl | |
parent | a54bb2bd0c8f540a7bed3b3aa7e6732b131d7bb4 (diff) | |
download | relx-51b7508737fd7668d000781c6502361e132cbbc4.tar.gz relx-51b7508737fd7668d000781c6502361e132cbbc4.tar.bz2 relx-51b7508737fd7668d000781c6502361e132cbbc4.zip |
add a dev mode that symlinks the release instead of copying it
This should only ever be used for development, however it makes it
very, very nice to be able to simple recompile a project without
recopying it to try new things.
Diffstat (limited to 'src/rlx_prv_assembler.erl')
-rw-r--r-- | src/rlx_prv_assembler.erl | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/src/rlx_prv_assembler.erl b/src/rlx_prv_assembler.erl index 9e3a6f7..8a60f52 100644 --- a/src/rlx_prv_assembler.erl +++ b/src/rlx_prv_assembler.erl @@ -41,6 +41,7 @@ init(State) -> %% looking for OTP Applications -spec do(rlx_state:t()) -> {ok, rlx_state:t()} | relx:error(). do(State) -> + print_dev_mode(State), {RelName, RelVsn} = rlx_state:default_configured_release(State), Release = rlx_state:get_realized_release(State, RelName, RelVsn), OutputDir = rlx_state:output_dir(State), @@ -139,6 +140,15 @@ format_error({tar_generation_error, Module, Errors}) -> %%%=================================================================== %%% Internal Functions %%%=================================================================== +print_dev_mode(State) -> + case rlx_state:dev_mode(State) of + true -> + ec_cmd_log:info(rlx_state:log(State), + "Dev mode enabled, release will be symlinked"); + false -> + ok + end. + -spec create_output_dir(file:name()) -> ok | {error, Reason::term()}. create_output_dir(OutputDir) -> @@ -157,7 +167,7 @@ create_output_dir(OutputDir) -> copy_app_directories_to_output(State, Release, OutputDir) -> LibDir = filename:join([OutputDir, "lib"]), ok = ec_file:mkdir_p(LibDir), - Apps = rlx_release:application_details(Release), + Apps = prepare_applications(State, rlx_release:application_details(Release)), Result = lists:filter(fun({error, _}) -> true; (_) -> @@ -173,6 +183,14 @@ copy_app_directories_to_output(State, Release, OutputDir) -> create_release_info(State, Release, OutputDir) end. +prepare_applications(State, Apps) -> + case rlx_state:dev_mode(State) of + true -> + [rlx_app_info:link(App, true) || App <- Apps]; + false -> + Apps + end. + copy_app(LibDir, App) -> AppName = erlang:atom_to_list(rlx_app_info:name(App)), AppVsn = rlx_app_info:vsn_as_string(App), @@ -323,13 +341,29 @@ copy_or_generate_sys_config_file(State, Release, OutputDir, RelDir) -> false -> ?RLX_ERROR({config_does_not_exist, ConfigPath}); true -> - ok = ec_file:copy(ConfigPath, RelSysConfPath), - include_erts(State, Release, OutputDir, RelDir) + copy_or_symlink_sys_config_file(State, Release, OutputDir, RelDir, + ConfigPath, RelSysConfPath) end end. +%% @doc copy config/sys.config or generate one to releases/VSN/sys.config +-spec copy_or_symlink_sys_config_file(rlx_state:t(), rlx_release:t(), + file:name(), file:name(), + file:name(), file:name()) -> + {ok, rlx_state:t()} | relx:error(). +copy_or_symlink_sys_config_file(State, Release, OutputDir, RelDir, + ConfigPath, RelSysConfPath) -> + case rlx_state:dev_mode(State) of + true -> + ok = file:make_symlink(ConfigPath, RelSysConfPath); + _ -> + ok = ec_file:copy(ConfigPath, RelSysConfPath) + end, + include_erts(State, Release, OutputDir, RelDir). + %% @doc Optionally add erts directory to release, if defined. --spec include_erts(rlx_state:t(), rlx_release:t(), file:name(), file:name()) -> {ok, rlx_state:t()} | relx:error(). +-spec include_erts(rlx_state:t(), rlx_release:t(), file:name(), file:name()) -> + {ok, rlx_state:t()} | relx:error(). include_erts(State, Release, OutputDir, RelDir) -> case rlx_state:get(State, include_erts, true) of true -> @@ -383,7 +417,7 @@ make_boot_script(State, Release, OutputDir, RelDir) -> end) of ok -> ec_cmd_log:error(rlx_state:log(State), - "release successfully created!"), + "release successfully created!"), create_RELEASES(OutputDir, ReleaseFile), {ok, State}; error -> @@ -1171,7 +1205,6 @@ append_node_suffix(Name, Suffix) -> list_to_atom(lists:concat([Node, Suffix, os:getpid()])) end. - %% %% Given a string or binary, parse it into a list of terms, ala file:consult/0 %% |