diff options
author | Eric Merritt <[email protected]> | 2013-11-22 11:09:34 -0800 |
---|---|---|
committer | Eric Merritt <[email protected]> | 2013-11-22 11:09:34 -0800 |
commit | 04a0d907ae17cdc9b9c62130a009138b8580ff43 (patch) | |
tree | 2cb3a45240153cee14b9b4facf155de010462e7f | |
parent | 6316901dfe96c4fbfe30e1d2759d40568b767dd0 (diff) | |
parent | 7eee9d200bf3c244f2f307861cc9fc6d35d9d5a2 (diff) | |
download | relx-04a0d907ae17cdc9b9c62130a009138b8580ff43.tar.gz relx-04a0d907ae17cdc9b9c62130a009138b8580ff43.tar.bz2 relx-04a0d907ae17cdc9b9c62130a009138b8580ff43.zip |
Merge pull request #95 from josevalim/jv-default-releasev0.5.2
Properly detect the default release and fail on conflicts
-rw-r--r-- | src/rlx_prv_release.erl | 12 | ||||
-rw-r--r-- | 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 3087e63..c2ed984 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)), @@ -134,6 +137,10 @@ make_extend_release(Config) -> {lib_dirs, [filename:join(LibDir1, "*")]}]), 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)), |