aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/rlx_prv_release.erl12
-rw-r--r--test/rlx_release_SUITE.erl11
2 files changed, 16 insertions, 7 deletions
diff --git a/src/rlx_prv_release.erl b/src/rlx_prv_release.erl
index 134ff7a..0e0a00d 100644
--- a/src/rlx_prv_release.erl
+++ b/src/rlx_prv_release.erl
@@ -88,7 +88,7 @@ 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) ->
- case rlx_state:default_configured_release(State) of
+ try rlx_state:default_configured_release(State) of
{undefined, undefined} ->
resolve_default_release(State, DepGraph);
{RelName, undefined} ->
@@ -97,6 +97,9 @@ find_default_release(State, DepGraph) ->
?RLX_ERROR({no_release_name, Vsn});
{RelName, RelVsn} ->
solve_release(State, DepGraph, RelName, RelVsn)
+ catch
+ {multiple_release_names, _, _}=Error ->
+ ?RLX_ERROR(Error)
end.
resolve_default_release(State0, DepGraph) ->
@@ -128,14 +131,13 @@ resolve_default_version(State0, DepGraph, RelName) ->
boolean().
release_sort({{RelName, RelVsnA}, _},
{{RelName, RelVsnB}, _}) ->
- ec_semver:lte(RelVsnA, RelVsnB);
-release_sort({{RelNameA, RelVsnA}, _}, {{RelNameB, RelVsnB}, _}) ->
+ ec_semver:lte(RelVsnB, RelVsnA);
+release_sort({{RelA, _}, _}, {{RelB, _}, _}) ->
%% The release names are different. When the releases are named differently
%% we can not just take the lastest version. You *must* provide a default
%% release name at least. So we throw an error here that the top can catch
%% and return
- erlang:atom_to_list(RelNameA) =< erlang:atom_to_list(RelNameB) andalso
- ec_semver:lte(RelVsnA, RelVsnB).
+ erlang:throw({multiple_release_names, RelA, RelB}).
solve_release(State0, DepGraph, RelName, RelVsn) ->
ec_cmd_log:debug(rlx_state:log(State0),
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl
index d16dce9..ae38928 100644
--- a/test/rlx_release_SUITE.erl
+++ b/test/rlx_release_SUITE.erl
@@ -93,12 +93,15 @@ make_release(Config) ->
write_config(ConfigFile,
[{release, {foo, "0.0.1"},
[goal_app_1,
- goal_app_2]}]),
+ goal_app_2]},
+ {release, {foo, "0.0.2"},
+ [goal_app_1,
+ goal_app_2]}]),
OutputDir = filename:join([proplists:get_value(data_dir, Config),
create_random_name("relx-output")]),
{ok, State} = relx:do(undefined, undefined, [], [LibDir1], 3,
OutputDir, ConfigFile),
- [{{foo, "0.0.1"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)),
+ [{{foo, "0.0.2"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)),
AppSpecs = rlx_release:applications(Release),
?assert(lists:keymember(stdlib, 1, AppSpecs)),
?assert(lists:keymember(kernel, 1, AppSpecs)),
@@ -133,6 +136,10 @@ make_extend_release(Config) ->
[goal_app_2]}]),
OutputDir = filename:join([proplists:get_value(data_dir, Config),
create_random_name("relx-output")]),
+
+ ?assertMatch({multiple_release_names,foo_test,foo},
+ catch relx:do(undefined, undefined, [], [LibDir1], 3, OutputDir, ConfigFile)),
+
{ok, State} = relx:do(foo_test, undefined, [], [LibDir1], 3,
OutputDir, ConfigFile),
[{{foo_test, "0.0.1"}, Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)),