diff --git a/apps/rebar/src/rebar_relx.erl b/apps/rebar/src/rebar_relx.erl index bfb4674d0..5a20e12a3 100644 --- a/apps/rebar/src/rebar_relx.erl +++ b/apps/rebar/src/rebar_relx.erl @@ -235,13 +235,16 @@ maybe_obey_command_args(RelxConfig, Opts, Args) -> undefined -> Acc; V -> - replace_all_instance(Opt, V, Acc) + add_or_replace_all_instance(Opt, V, Acc) end end, RelxConfig, Args). -replace_all_instance(Opt, Value, RelxConfig) -> - lists:map(fun({K, _}) when K =:= Opt -> {K, Value}; - (Other) -> Other end, RelxConfig). +add_or_replace_all_instance(Opt, Value, RelxConfig) -> + case lists:keymember(Opt, 1, RelxConfig) of + true -> lists:map(fun({K, _}) when K =:= Opt -> {K, Value}; + (Other) -> Other end, RelxConfig); + false -> [{Opt, Value} | RelxConfig] + end. %% diff --git a/apps/rebar/test/rebar_release_SUITE.erl b/apps/rebar/test/rebar_release_SUITE.erl index a793317f3..dd6c33b1c 100644 --- a/apps/rebar/test/rebar_release_SUITE.erl +++ b/apps/rebar/test/rebar_release_SUITE.erl @@ -8,6 +8,7 @@ all() -> [release, dev_mode_release, profile_dev_mode_override_release, tar, + command_line_override, profile_ordering_sys_config_extend, profile_ordering_sys_config_extend_3_tuple_merge, extend_release, @@ -74,6 +75,19 @@ config_file(Config) -> rebar_test_utils:run_and_check(Config, [{relx, RelxConfig("4.0.0")}], ["release"], {ok, [{release, Name, "4.0.0", false}]}). +command_line_override(Config) -> + %% regression test for #2967 + AppDir = ?config(apps, Config), + Vsn = "0.0.0", + Name = list_to_atom(?config(name, Config)), + Content = [{Name, [{something, true}]}], + InputPath = filename:join([AppDir, "config", "mysysconfig"]), + rebar_test_utils:create_config(AppDir, InputPath, Content), + RelxConfig = [{release, {Name, Vsn}, [Name]}, {lib_dirs, [AppDir]}], + rebar_test_utils:run_and_check(Config, [{relx, RelxConfig}], ["release", "--sys_config=" ++ InputPath], + {ok, [{release, Name, Vsn, false}]}), + {ok, Content} = file:consult(filename:join([AppDir, "_build/default/rel", Name, "releases", Vsn, "sys.config"])). + dev_mode_release(Config) -> AppDir = ?config(apps, Config), Name = ?config(name, Config),