Browse Source

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.
pull/942/head
Tristan Sloughter 9 years ago
parent
commit
996da460b0
2 changed files with 3 additions and 22 deletions
  1. +2
    -0
      src/rebar_opts.erl
  2. +1
    -22
      src/rebar_relx.erl

+ 2
- 0
src/rebar_opts.erl View File

@ -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 =:= [] ->

+ 1
- 22
src/rebar_relx.erl View File

@ -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))

Loading…
Cancel
Save