Skip to content

Commit

Permalink
Merge pull request #1563 from djnym/relx-overlay-fix
Browse files Browse the repository at this point in the history
Avoid reversing relx overlays.
  • Loading branch information
ferd authored Jun 1, 2017
2 parents 87e756d + 249b5f1 commit 5ab3230
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/rebar_relx.erl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
-export([do/4,
format_error/1]).

-ifdef(TEST).
-export([merge_overlays/1]).
-endif.

-include("rebar.hrl").

%% ===================================================================
Expand Down Expand Up @@ -64,5 +68,5 @@ merge_overlays(Config) ->
(_) -> false
end, Config),
%% Have profile overlay entries come before others to match how profiles work elsewhere
NewOverlay = lists:reverse(lists:flatmap(fun({overlay, Overlay}) -> Overlay end, Overlays)),
NewOverlay = lists:flatmap(fun({overlay, Overlay}) -> Overlay end, lists:reverse(Overlays)),
[{overlay, NewOverlay} | Others].
25 changes: 25 additions & 0 deletions test/rebar_release_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ all() -> [release,
profile_ordering_sys_config_extend_3_tuple_merge,
extend_release,
user_output_dir, profile_overlays,
profile_overlay_merge,
overlay_vars].

init_per_testcase(Case, Config0) ->
Expand Down Expand Up @@ -217,6 +218,30 @@ profile_overlays(Config) ->
{dir, filename:join(ReleaseDir, "randomdir")}]}
).

profile_overlay_merge (_Config) ->
% when profile and relx overlays both exist, the profile overlays should be
% first, then the relx overlays, all the rest of the config should come
% after, rebar_relx:merge_overlays/1 should do this.
RelxOverlay = [{mkdir, "1_from_relx"}, {mkdir, "2_from_relx"}],
ProfileOverlay = [{mkdir, "0_from_other_profile"}],
OtherConfig = [{other1, config}, {other2, config}],

% test with no overlays
?assertEqual([{overlay,[]}] ++ OtherConfig,
rebar_relx:merge_overlays(OtherConfig)),

% test with relx only, just move overlays to the top
RelxOnly = OtherConfig ++ [{overlay, RelxOverlay}],
?assertEqual([{overlay, RelxOverlay}]++OtherConfig,
rebar_relx:merge_overlays(RelxOnly)),

% now test with a profile (profiles end up after relx overlays
ProfilesToMerge = OtherConfig ++
[{overlay, RelxOverlay},
{overlay, ProfileOverlay}],
?assertEqual([{overlay, ProfileOverlay ++ RelxOverlay}] ++ OtherConfig,
rebar_relx:merge_overlays(ProfilesToMerge)).

overlay_vars(Config) ->
AppDir = ?config(apps, Config),
Name = ?config(name, Config),
Expand Down

0 comments on commit 5ab3230

Please sign in to comment.