Преглед изворни кода

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"]},

Loading…
Откажи
Сачувај