From 2c9d7f4d79cb66f1bc306cac86d7ed02489b0f80 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sun, 16 Nov 2014 11:08:43 -0600 Subject: fix for error message output for no default release --- src/rlx_prv_release.erl | 26 ++++++++++++++------------ test/rlx_release_SUITE.erl | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/rlx_prv_release.erl b/src/rlx_prv_release.erl index 83c9e6d..95a31e8 100644 --- a/src/rlx_prv_release.erl +++ b/src/rlx_prv_release.erl @@ -97,19 +97,21 @@ create_dep_graph(State) -> -spec find_default_release(rlx_state:t(), rlx_depsolver:t()) -> {ok, rlx_state:t()} | relx:error(). find_default_release(State, DepGraph) -> - try rlx_state:default_configured_release(State) of - {undefined, undefined} -> - resolve_default_release(State, DepGraph); - {RelName, undefined} -> - resolve_default_version(State, DepGraph, RelName); - {undefined, Vsn} -> - ?RLX_ERROR({no_release_name, Vsn}); - {RelName, RelVsn} -> - solve_release(State, DepGraph, RelName, RelVsn); - undefined -> - ?RLX_ERROR(no_releases_in_system) + try + case rlx_state:default_configured_release(State) of + {undefined, undefined} -> + resolve_default_release(State, DepGraph); + {RelName, undefined} -> + resolve_default_version(State, DepGraph, RelName); + {undefined, Vsn} -> + ?RLX_ERROR({no_release_name, Vsn}); + {RelName, RelVsn} -> + solve_release(State, DepGraph, RelName, RelVsn); + undefined -> + ?RLX_ERROR(no_releases_in_system) + end catch - {multiple_release_names, _, _}=Error -> + throw:{multiple_release_names, _, _}=Error -> ?RLX_ERROR(Error) end. diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl index 6ae4f24..837e030 100644 --- a/test/rlx_release_SUITE.erl +++ b/test/rlx_release_SUITE.erl @@ -139,7 +139,7 @@ make_extend_release(Config) -> OutputDir = filename:join([proplists:get_value(data_dir, Config), create_random_name("relx-output")]), - ?assertMatch({multiple_release_names,foo_test,foo}, + ?assertMatch({error, {rlx_prv_release, {multiple_release_names,foo_test,foo}}}, catch relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile)), {ok, State} = relx:do(foo_test, undefined, [], [LibDir1], 3, -- cgit v1.2.3 From f89df2f4d693c8522fc9b911a6fc5bef31f338fc Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 22 Nov 2014 11:23:47 -0600 Subject: if include_erts is false, do not include stdlibs --- priv/templates/bin.dtl | 3 ++- priv/templates/extended_bin.dtl | 4 ++++ src/rlx_prv_assembler.erl | 23 +++++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/priv/templates/bin.dtl b/priv/templates/bin.dtl index bb83434..434cbd4 100755 --- a/priv/templates/bin.dtl +++ b/priv/templates/bin.dtl @@ -47,6 +47,7 @@ export BINDIR="$ERTS_DIR/bin" export EMU="beam" export PROGNAME="erl" export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH" +ERTS_LIB_DIR="$ERTS_DIR/../lib" cd "$ROOTDIR" @@ -57,7 +58,7 @@ ARGS="$@" set -- "$ERL_OPTS" [ "$SYS_CONFIG" ] && set -- "$@" -config "$SYS_CONFIG" [ "$VM_ARGS" ] && set -- "$@" -args_file "$VM_ARGS" -set -- "$@" -boot "$REL_DIR/$REL_NAME" "$ARGS" +set -- "$@" -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" -boot "$REL_DIR/$REL_NAME" "$ARGS" # Boot the release $BINDIR/erlexec $@ diff --git a/priv/templates/extended_bin.dtl b/priv/templates/extended_bin.dtl index fa77a4a..bd1e981 100644 --- a/priv/templates/extended_bin.dtl +++ b/priv/templates/extended_bin.dtl @@ -36,6 +36,7 @@ relx_rem_sh() { # Setup remote shell command to control node exec "$BINDIR/erl" "$NAME_TYPE" "$id" -remsh "$NAME" -boot start_clean \ + -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \ -setcookie "$COOKIE" -kernel net_ticktime $TICKTIME } @@ -146,6 +147,7 @@ export BINDIR="$ERTS_DIR/bin" export EMU="beam" export PROGNAME="erl" export LD_LIBRARY_PATH="$ERTS_DIR/lib:$LD_LIBRARY_PATH" +ERTS_LIB_DIR="$ERTS_DIR/../lib" cd "$ROOTDIR" @@ -321,6 +323,7 @@ case "$1" in # Build an array of arguments to pass to exec later on # Build it here because this command will be used for logging. set -- "$BINDIR/erlexec" -boot "$BOOTFILE" \ + -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \ -env ERL_LIBS "$REL_DIR/lib" -config "$CONFIG_PATH" \ -args_file "$VMARGS_PATH" @@ -357,6 +360,7 @@ case "$1" in # Build it here because this command will be used for logging. set -- "$BINDIR/erlexec" $FOREGROUNDOPTIONS \ -boot "$REL_DIR/$BOOTFILE" -mode embedded -config "$CONFIG_PATH" \ + -boot_var ERTS_LIB_DIR "$ERTS_LIB_DIR" \ -args_file "$VMARGS_PATH" # Dump environment info for logging purposes diff --git a/src/rlx_prv_assembler.erl b/src/rlx_prv_assembler.erl index 9972988..ee81631 100644 --- a/src/rlx_prv_assembler.erl +++ b/src/rlx_prv_assembler.erl @@ -147,6 +147,7 @@ copy_app_directories_to_output(State, Release, OutputDir) -> LibDir = filename:join([OutputDir, "lib"]), ok = ec_file:mkdir_p(LibDir), IncludeSrc = rlx_state:include_src(State), + IncludeErts = rlx_state:get(State, include_erts, true), Apps = prepare_applications(State, rlx_release:application_details(Release)), Result = lists:filter(fun({error, _}) -> true; @@ -154,7 +155,7 @@ copy_app_directories_to_output(State, Release, OutputDir) -> false end, lists:flatten(ec_plists:map(fun(App) -> - copy_app(LibDir, App, IncludeSrc) + copy_app(LibDir, App, IncludeSrc, IncludeErts) end, Apps))), case Result of [E | _] -> @@ -171,7 +172,7 @@ prepare_applications(State, Apps) -> Apps end. -copy_app(LibDir, App, IncludeSrc) -> +copy_app(LibDir, App, IncludeSrc, IncludeErts) -> AppName = erlang:atom_to_list(rlx_app_info:name(App)), AppVsn = rlx_app_info:original_vsn(App), AppDir = rlx_app_info:dir(App), @@ -182,10 +183,23 @@ copy_app(LibDir, App, IncludeSrc) -> %% a release dir ok; true -> - copy_app(App, AppDir, TargetDir, IncludeSrc) + case IncludeErts of + false -> + case is_erts_lib(AppDir) of + true -> + []; + false -> + copy_app_(App, AppDir, TargetDir, IncludeSrc) + end; + _ -> + copy_app_(App, AppDir, TargetDir, IncludeSrc) + end end. -copy_app(App, AppDir, TargetDir, IncludeSrc) -> +is_erts_lib(Dir) -> + lists:prefix(filename:split(list_to_binary(code:lib_dir())), filename:split(Dir)). + +copy_app_(App, AppDir, TargetDir, IncludeSrc) -> remove_symlink_or_directory(TargetDir), case rlx_app_info:link(App) of true -> @@ -443,6 +457,7 @@ include_erts(State, Release, OutputDir, RelDir) -> make_boot_script(State, Release, OutputDir, RelDir) -> Options = [{path, [RelDir | rlx_util:get_code_paths(Release, OutputDir)]}, {outdir, RelDir}, + {variables, [{"ERTS_LIB_DIR", code:lib_dir()}]}, no_module_tests, silent], Name = erlang:atom_to_list(rlx_release:name(Release)), ReleaseFile = filename:join([RelDir, Name ++ ".rel"]), -- cgit v1.2.3