From 996da460b0b0939afa53a2383f15f88ac8cca9de Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Thu, 26 Nov 2015 11:05:25 -0600 Subject: special handling of relx configs in profiles Relx config need new values at the end of the list and profile additions prepended. So now in apply_profile in the case it is a relx config we prepend the config list. This does, however, mean that a profile release can not 'extend' a release defined in the default profile since the one being extended would have its definition after the profile release and thus relx would not be able to use its values for extending. --- src/rebar_opts.erl | 2 ++ src/rebar_relx.erl | 23 +---------------------- 2 files changed, 3 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/rebar_opts.erl b/src/rebar_opts.erl index 97f39b8..b02a504 100644 --- a/src/rebar_opts.erl +++ b/src/rebar_opts.erl @@ -115,6 +115,8 @@ merge_opts(NewOpts, OldOpts) -> Value; (mib_first_files, NewValue, OldValue) -> OldValue ++ NewValue; + (relx, NewValue, OldValue) -> + rebar_utils:tup_umerge(OldValue, NewValue); (_Key, NewValue, OldValue) when is_list(NewValue) -> case io_lib:printable_list(NewValue) of true when NewValue =:= [] -> diff --git a/src/rebar_relx.erl b/src/rebar_relx.erl index 36a24f0..cb8fac5 100644 --- a/src/rebar_relx.erl +++ b/src/rebar_relx.erl @@ -30,9 +30,8 @@ do(Module, Command, Provider, State) -> relx:main([{lib_dirs, LibDirs} ,{caller, api} | output_dir(OutputDir, Options)], AllOptions); Config -> - Config1 = update_config(Config), relx:main([{lib_dirs, LibDirs} - ,{config, Config1} + ,{config, Config} ,{caller, api} | output_dir(OutputDir, Options)], AllOptions) end, rebar_hooks:run_all_hooks(Cwd, post, Provider, Providers, State), @@ -46,26 +45,6 @@ do(Module, Command, Provider, State) -> format_error(Reason) -> io_lib:format("~p", [Reason]). -%% To handle profiles rebar3 expects the provider to use the first entry -%% in a configuration key-value list as the value of a key if dups exist. -%% This does not work with relx. Some config options must not lose their -%% order (release which has an extends option is one). So here we pull out -%% options that are special so we can reverse the rest so what we expect -%% from a rebar3 profile is what we get on the relx side. --define(SPECIAL_KEYS, [release, vm_args, sys_config, overlay_vars, lib_dirs]). - -update_config(Config) -> - {Special, Other} = - lists:foldl(fun(Tuple, {SpecialAcc, OtherAcc}) when is_tuple(Tuple) -> - case lists:member(element(1, Tuple), ?SPECIAL_KEYS) of - true -> - {[Tuple | SpecialAcc], OtherAcc}; - false -> - {SpecialAcc, [Tuple | OtherAcc]} - end - end, {[], []}, Config), - lists:reverse(Special) ++ Other. - %% Don't override output_dir if the user passed one on the command line output_dir(OutputDir, Options) -> [{output_dir, OutputDir} || not(lists:member("-o", Options)) -- cgit v1.1