浏览代码

Merge pull request #1610 from ferd/fix-relx-overlaying

Fix ordering of overlays and overlay vars in Relx
pull/1614/head
Fred Hebert 7 年前
提交者 GitHub
父节点
当前提交
3d15c00917
共有 2 个文件被更改,包括 38 次插入8 次删除
  1. +5
    -1
      src/rebar_opts.erl
  2. +33
    -7
      test/rebar_release_SUITE.erl

+ 5
- 1
src/rebar_opts.erl 查看文件

@ -132,7 +132,11 @@ merge_opt(mib_first_files, Value, Value) ->
merge_opt(mib_first_files, NewValue, OldValue) ->
OldValue ++ NewValue;
merge_opt(relx, NewValue, OldValue) ->
rebar_utils:tup_umerge(OldValue, NewValue);
Partition = fun(C) -> is_tuple(C) andalso element(1, C) =:= overlay end,
{NewOverlays, NewOther} = lists:partition(Partition, NewValue),
{OldOverlays, OldOther} = lists:partition(Partition, OldValue),
rebar_utils:tup_umerge(NewOverlays, OldOverlays)
++ rebar_utils:tup_umerge(OldOther, NewOther);
merge_opt(Key, NewValue, OldValue)
when Key == erl_opts; Key == eunit_compile_opts; Key == ct_compile_opts ->
merge_erl_opts(lists:reverse(OldValue), NewValue);

+ 33
- 7
test/rebar_release_SUITE.erl 查看文件

@ -200,13 +200,34 @@ profile_overlays(Config) ->
AppDir = ?config(apps, Config),
Name = ?config(name, Config),
Vsn = "1.0.0",
file:write_file(filename:join(AppDir, "dev.file"), "dev.\n"),
file:write_file(filename:join(AppDir, "prod.file"), "prod.\n"),
file:write_file(filename:join(AppDir, "dev.vars"), "{env, \"dev\"}.\n"),
file:write_file(filename:join(AppDir, "prod.vars"), "{env, \"prod\"}.\n"),
{ok, RebarConfig} =
file:consult(rebar_test_utils:create_config(AppDir,
[{relx, [{release, {list_to_atom(Name), Vsn},
[list_to_atom(Name)]},
{overlay, [{mkdir, "randomdir"}]},
{lib_dirs, [AppDir]}]},
{profiles, [{prod, [{relx, [{overlay, [{mkdir, "otherrandomdir"}]}]}]}]}])),
file:consult(rebar_test_utils:create_config(AppDir,
%% Paths are relative, but to cwd in relx, not the project root as
%% seen by rebar3 (in non-test cases, they're the same).
%% Work around by being explicit.
[{relx, [{release, {list_to_atom(Name), Vsn},
[list_to_atom(Name)]},
{overlay_vars, filename:join(AppDir, "dev.vars")},
{overlay, [{mkdir, "randomdir"},
{copy, filename:join(AppDir,"./dev.file"), "profile.file"},
{copy, filename:join(AppDir,"./dev.file"), "{{env}}.file"},
{chmod, 8#00770, "profile.file"}]},
{lib_dirs, [AppDir]}]},
{profiles, [{prod,
[{relx, [
{overlay_vars, filename:join(AppDir, "prod.vars")},
{overlay, [{mkdir, "otherrandomdir"},
{copy, filename:join(AppDir, "./prod.file"), "{{env}}.file"},
{copy, filename:join(AppDir, "./prod.file"), "profile.file"},
{chmod, 8#00770, "profile.file"}]}
]}]
}]}
])),
ReleaseDir = filename:join([AppDir, "./_build/prod/rel/", Name]),
@ -216,7 +237,12 @@ profile_overlays(Config) ->
{ok, [{release, list_to_atom(Name), Vsn, false},
{dir, filename:join(ReleaseDir, "otherrandomdir")},
{dir, filename:join(ReleaseDir, "randomdir")}]}
).
),
?assertMatch({ok,[prod]},
file:consult(filename:join(ReleaseDir, "profile.file"))),
?assertMatch({ok,[prod]},
file:consult(filename:join(ReleaseDir, "prod.file"))),
ok.
profile_overlay_merge (_Config) ->
% when profile and relx overlays both exist, the profile overlays should be

正在加载...
取消
保存