aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/rlx_prv_assembler.erl48
-rw-r--r--src/rlx_prv_config.erl2
-rw-r--r--src/rlx_rel_discovery.erl18
-rw-r--r--src/rlx_state.erl5
-rw-r--r--test/rlx_discover_SUITE.erl6
-rw-r--r--test/rlx_release_SUITE.erl8
6 files changed, 60 insertions, 27 deletions
diff --git a/src/rlx_prv_assembler.erl b/src/rlx_prv_assembler.erl
index 282f050..cdbcea0 100644
--- a/src/rlx_prv_assembler.erl
+++ b/src/rlx_prv_assembler.erl
@@ -331,24 +331,26 @@ write_bin_file(State, Release, OutputDir, RelDir) ->
ok = file:write_file(BareRel, StartFile),
ok = file:change_mode(BareRel, 8#777)
end,
- copy_or_generate_vmargs_file(State, RelName, RelDir),
+ copy_or_generate_vmargs_file(State, Release, OutputDir, RelDir),
copy_or_generate_sys_config_file(State, Release, OutputDir, RelDir).
%% @doc copy vm.args or generate one to releases/VSN/vm.args
--spec copy_or_generate_vmargs_file(rlx_state:t(), string(), file:name()) ->
+-spec copy_or_generate_vmargs_file(rlx_state:t(), rlx_release:t(), file:name(), file:name()) ->
{ok, rlx_state:t()} | relx:error().
-copy_or_generate_vmargs_file(State, RelName, RelDir) ->
+copy_or_generate_vmargs_file(State, Release, OutputDir, RelDir) ->
RelVmargsPath = filename:join([RelDir, "vm.args"]),
case rlx_state:vm_args(State) of
undefined ->
+ RelName = erlang:atom_to_list(rlx_release:name(Release)),
unless_exists_write_default(RelVmargsPath, vm_args_file(RelName));
ArgsPath ->
case filelib:is_regular(ArgsPath) of
false ->
?RLX_ERROR({vmargs_does_not_exist, ArgsPath});
true ->
- ec_file:copy(ArgsPath, RelVmargsPath)
+ copy_or_symlink_config_file(State, Release, OutputDir, RelDir,
+ ArgsPath, RelVmargsPath)
end
end.
@@ -367,23 +369,24 @@ copy_or_generate_sys_config_file(State, Release, OutputDir, RelDir) ->
false ->
?RLX_ERROR({config_does_not_exist, ConfigPath});
true ->
- copy_or_symlink_sys_config_file(State, Release, OutputDir, RelDir,
+ copy_or_symlink_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) ->
+-spec copy_or_symlink_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_config_file(State, Release, OutputDir, RelDir,
+ ConfigPath, RelConfPath) ->
+ ensure_not_exist(RelConfPath),
case rlx_state:dev_mode(State) of
true ->
- ok = file:make_symlink(ConfigPath, RelSysConfPath);
+ ok = file:make_symlink(ConfigPath, RelConfPath);
_ ->
- ok = ec_file:copy(ConfigPath, RelSysConfPath)
+ ok = ec_file:copy(ConfigPath, RelConfPath)
end,
include_erts(State, Release, OutputDir, RelDir).
@@ -427,14 +430,14 @@ make_boot_script(State, Release, OutputDir, RelDir) ->
systools:make_script(Name, CorrectedOptions)
end) of
ok ->
- ec_cmd_log:error(rlx_state:log(State),
+ ec_cmd_log:info(rlx_state:log(State),
"release successfully created!"),
create_RELEASES(OutputDir, ReleaseFile),
{ok, State};
error ->
?RLX_ERROR({release_script_generation_error, ReleaseFile});
{ok, _, []} ->
- ec_cmd_log:error(rlx_state:log(State),
+ ec_cmd_log:info(rlx_state:log(State),
"release successfully created!"),
create_RELEASES(OutputDir, ReleaseFile),
{ok, State};
@@ -637,6 +640,15 @@ unless_exists_write_default(Path, File) ->
ok = file:write_file(Path, File)
end.
+-spec ensure_not_exist(file:name()) -> ok.
+ensure_not_exist(RelConfPath) ->
+ case ec_file:exists(RelConfPath) of
+ false ->
+ ok;
+ _ ->
+ ec_file:remove(RelConfPath)
+ end.
+
erl_script(ErtsVsn) ->
[<<"#!/bin/sh
set -e
@@ -938,8 +950,8 @@ case \"$1\" in
# however, for debugging, sometimes start_clean.boot is useful.
# For e.g. 'setup', one may even want to name another boot script.
case \"$1\" in
- console) [ -f $REL_DIR/$REL_NAME.boot ] && BOOTFILE=$REL_NAME || BOOTFILE=start ;;
- console_clean) BOOTFILE=start_clean ;;
+ console) [ -f $REL_DIR/$REL_NAME.boot ] && BOOTFILE=$REL_DIR/$REL_NAME || BOOTFILE=$REL_DIR/start ;;
+ console_clean) BOOTFILE=$ROOTDIR/bin/start_clean ;;
console_boot)
shift
BOOTFILE=\"$1\"
@@ -949,7 +961,7 @@ case \"$1\" in
# Setup beam-required vars
EMU=beam
PROGNAME=`echo $0 | sed 's/.*\\///'`
- CMD=\"$BINDIR/erlexec -boot $REL_DIR/$BOOTFILE -mode embedded -config $CONFIG_PATH -args_file $VMARGS_PATH\"
+ CMD=\"$BINDIR/erlexec -boot $BOOTFILE -mode embedded -config $CONFIG_PATH -args_file $VMARGS_PATH\"
export EMU
export PROGNAME
diff --git a/src/rlx_prv_config.erl b/src/rlx_prv_config.erl
index aa2e79c..0379c2f 100644
--- a/src/rlx_prv_config.erl
+++ b/src/rlx_prv_config.erl
@@ -189,6 +189,8 @@ load_terms({vm_args, VmArgs}, {ok, State}) ->
{ok, rlx_state:vm_args(State, filename:absname(VmArgs))};
load_terms({sys_config, SysConfig}, {ok, State}) ->
{ok, rlx_state:sys_config(State, filename:absname(SysConfig))};
+load_terms({output_dir, OutputDir}, {ok, State}) ->
+ {ok, rlx_state:output_dir(State, filename:absname(OutputDir))};
load_terms({overlay_vars, OverlayVars}, {ok, State}) ->
CurrentOverlayVars = rlx_state:get(State, overlay_vars),
NewOverlayVars0 = list_of_overlay_vars_files(OverlayVars),
diff --git a/src/rlx_rel_discovery.erl b/src/rlx_rel_discovery.erl
index 837ebe6..23c0ab9 100644
--- a/src/rlx_rel_discovery.erl
+++ b/src/rlx_rel_discovery.erl
@@ -38,12 +38,18 @@
-spec do(rlx_state:t(), [file:name()], [rlx_app_info:t()]) ->
{ok, [rlx_release:t()]} | relx:error().
do(State, LibDirs, AppMeta) ->
- ec_cmd_log:info(rlx_state:log(State),
- fun() ->
- ["Resolving available OTP Releases from directories:\n",
- string:join([[rlx_util:indent(2), LibDir] || LibDir <- LibDirs], "\n")]
- end),
- resolve_rel_metadata(State, LibDirs, AppMeta).
+ case rlx_state:get(State, disable_rel_discovery, false) of
+ true ->
+ ec_cmd_log:debug(rlx_state:log(State), "Disbaled resolving of OTP releases"),
+ {ok, []};
+ false ->
+ ec_cmd_log:info(rlx_state:log(State),
+ fun() ->
+ ["Resolving available OTP Releases from directories:\n",
+ string:join([[rlx_util:indent(2), LibDir] || LibDir <- LibDirs], "\n")]
+ end),
+ resolve_rel_metadata(State, LibDirs, AppMeta)
+ end.
-spec format_error([ErrorDetail::term()]) -> iolist().
format_error(ErrorDetails)
diff --git a/src/rlx_state.erl b/src/rlx_state.erl
index bc4af5b..2d0493b 100644
--- a/src/rlx_state.erl
+++ b/src/rlx_state.erl
@@ -27,6 +27,7 @@
log/1,
actions/1,
output_dir/1,
+ output_dir/2,
lib_dirs/1,
add_lib_dirs/2,
overrides/1,
@@ -186,6 +187,10 @@ log(#state_t{log=LogState}) ->
output_dir(#state_t{output_dir=OutDir}) ->
OutDir.
+-spec output_dir(t(), Directory::file:filename()) -> t().
+output_dir(State, Directory) ->
+ State#state_t{output_dir=Directory}.
+
-spec lib_dirs(t()) -> [file:name()].
lib_dirs(#state_t{lib_dirs=LibDir}) ->
LibDir.
diff --git a/test/rlx_discover_SUITE.erl b/test/rlx_discover_SUITE.erl
index e75ea36..0fb1ad7 100644
--- a/test/rlx_discover_SUITE.erl
+++ b/test/rlx_discover_SUITE.erl
@@ -110,10 +110,12 @@ no_beam_case(Config) ->
AppDir = filename:join([LibDir2, BadName]),
write_app_file(AppDir, BadName, BadVsn),
State0 = proplists:get_value(state, Config),
- {DiscoverProvider, {ok, State1}} = rlx_provider:new(rlx_prv_discover, State0),
+ %% Deliberately disable release discovery when running `rlx_prv_discover`
+ State1 = rlx_state:put(State0, disable_rel_discovery, true),
+ {DiscoverProvider, {ok, State2}} = rlx_provider:new(rlx_prv_discover, State1),
?assertMatch({ok, _},
- rlx_provider:do(DiscoverProvider, State1)).
+ rlx_provider:do(DiscoverProvider, State2)).
bad_ebin_case(Config) ->
LibDir1 = proplists:get_value(lib1, Config),
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl
index c2ed984..8f27050 100644
--- a/test/rlx_release_SUITE.erl
+++ b/test/rlx_release_SUITE.erl
@@ -900,10 +900,14 @@ make_dev_mode_release(Config) ->
SysConfig = filename:join([LibDir1, "config", "sys.config"]),
write_config(SysConfig, [{this_is_a_test, "yup it is"}]),
+ VmArgs = filename:join([LibDir1, "config", "vm.args"]),
+ ec_file:write(VmArgs, ""),
+
ConfigFile = filename:join([LibDir1, "relx.config"]),
write_config(ConfigFile,
[{dev_mode, true},
{sys_config, SysConfig},
+ {vm_args, VmArgs},
{release, {foo, "0.0.1"},
[goal_app_1,
goal_app_2]}]),
@@ -919,7 +923,9 @@ make_dev_mode_release(Config) ->
?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "goal_app_2-0.0.1"]))),
?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "lib_dep_1-0.0.1"]))),
?assert(ec_file:is_symlink(filename:join([OutputDir, "releases", "0.0.1",
- "sys.config"]))).
+ "sys.config"]))),
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "releases", "0.0.1",
+ "vm.args"]))).
%%%===================================================================