From 7eee9d200bf3c244f2f307861cc9fc6d35d9d5a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 18 Nov 2013 11:03:06 +0100 Subject: Properly detect the default release and fail on conflicts Closes #93 --- src/rlx_prv_release.erl | 12 +++++++----- test/rlx_release_SUITE.erl | 11 +++++++++-- 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)), -- cgit v1.2.3