ソースを参照

Fix precedence rules of erl_opts for test profile

When adding the 'TEST' macro to the test profile, we mistakenly sourced
the erl_opts values from the base profile rather than the test profile
itself.

This means that in cases where the base profile set an option such as
'no_debug_info' and a profile overrode it with 'debug_info', the default
options would get injected within the test profile, and broke the
precedence rules, yielding incompatible values.

This patch fixes things by adding the macro to the values sourced from
the test profile itself, fixing the issue.
pull/1759/head
Fred Hebert 7年前
コミット
543fe579a6
2個のファイルの変更37行の追加1行の削除
  1. +5
    -1
      src/rebar3.erl
  2. +32
    -0
      test/rebar_profiles_SUITE.erl

+ 5
- 1
src/rebar3.erl ファイルの表示

@ -389,7 +389,11 @@ state_from_global_config(Config, GlobalConfigFile) ->
rebar_state:providers(rebar_state:new(GlobalConfig3, Config), GlobalPlugins).
test_state(State) ->
ErlOpts = rebar_state:get(State, erl_opts, []),
%% Fetch the test profile's erl_opts only
Opts = rebar_state:opts(State),
Profiles = rebar_opts:get(Opts, profiles, []),
ProfileOpts = proplists:get_value(test, Profiles, []),
ErlOpts = proplists:get_value(erl_opts, ProfileOpts, []),
TestOpts = safe_define_test_macro(ErlOpts),
[{extra_src_dirs, ["test"]}, {erl_opts, TestOpts}].

+ 32
- 0
test/rebar_profiles_SUITE.erl ファイルの表示

@ -28,6 +28,7 @@
test_profile_erl_opts_order_4/1,
test_profile_erl_opts_order_5/1,
test_erl_opts_debug_info/1,
test_profile_erl_opts_precedence/1,
first_files_exception/1]).
-include_lib("common_test/include/ct.hrl").
@ -52,6 +53,7 @@ all() ->
test_profile_erl_opts_order_4,
test_profile_erl_opts_order_5,
test_erl_opts_debug_info,
test_profile_erl_opts_precedence,
first_files_exception].
init_per_suite(Config) ->
@ -527,6 +529,36 @@ test_erl_opts_debug_info(_Config) ->
no_debug_info,b,c,{debug_info,{mod,"123"}}])),
ok.
test_profile_erl_opts_precedence(Config) ->
AppDir = ?config(apps, Config),
Name = rebar_test_utils:create_random_name("profile_new_key_"),
Vsn = rebar_test_utils:create_random_vsn(),
rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
RebarConfig = [{erl_opts, [no_debug_info]},
{profiles, [
{test, [{erl_opts, [debug_info, {d,'HI'}]}]},
{other, [{erl_opts, [debug_info, {d,'HI'}]}]}
]}],
{ok, State1} = rebar_test_utils:run_and_check(
Config, RebarConfig, ["as", "test", "compile"], return
),
{ok, State2} = rebar_test_utils:run_and_check(
Config, RebarConfig, ["as", "other", "compile"], return
),
{ok, State3} = rebar_test_utils:run_and_check(
Config, RebarConfig, ["compile"], return
),
Opts1 = rebar_state:opts(State1),
Opts2 = rebar_state:opts(State2),
Opts3 = rebar_state:opts(State3),
ErlOpts1 = rebar_opts:erl_opts(Opts1),
ErlOpts2 = rebar_opts:erl_opts(Opts2),
ErlOpts3 = rebar_opts:erl_opts(Opts3),
?assertEqual([{d,'TEST'}, debug_info, {d,'HI'}], ErlOpts1),
?assertEqual([debug_info, {d,'HI'}], ErlOpts2),
?assertEqual([], ErlOpts3),
ok.
first_files_exception(_Config) ->
RebarConfig = [{erl_first_files, ["c","a","b"]},
{mib_first_files, ["c","a","b"]},

読み込み中…
キャンセル
保存