Implement merged overlays

This allows overlay_vars to merge comma delimited var config files
This commit is contained in:
Pedram Nimreezi 2013-02-04 15:20:30 -05:00
parent 720d71e47d
commit df7cfba71f

View file

@ -166,22 +166,32 @@ process_overlay(Config, ReltoolConfig) ->
%% providing an additional file on the command-line. %% providing an additional file on the command-line.
%% %%
overlay_vars(Config, Vars0, ReltoolConfig) -> overlay_vars(Config, Vars0, ReltoolConfig) ->
BaseVars = load_vars_file(proplists:get_value(overlay_vars, ReltoolConfig)), BaseVars = load_vars_file([proplists:get_value(overlay_vars, ReltoolConfig)]),
OverrideVars = load_vars_file(rebar_config:get_global(Config, OverlayVars = rebar_config:get_global(Config, overlay_vars, []),
overlay_vars, OverrideVars = load_vars_file(string:tokens(OverlayVars, ",")),
undefined)), M = fun merge_overlay_var/3,
M = fun(_Key, _Base, Override) -> Override end,
dict:merge(M, dict:merge(M, Vars0, BaseVars), OverrideVars). dict:merge(M, dict:merge(M, Vars0, BaseVars), OverrideVars).
merge_overlay_var(_Key, _Base, Override) -> Override.
%% %%
%% If a filename is provided, construct a dict of terms %% If a filename is provided, construct a dict of terms
%% %%
load_vars_file(undefined) -> load_vars_file([undefined]) ->
dict:new(); dict:new();
load_vars_file(File) -> load_vars_file([]) ->
dict:new();
load_vars_file(Files) ->
load_vars_file(Files, dict:new()).
load_vars_file([], Dict) ->
Dict;
load_vars_file([File | Files], BaseVars) ->
case rebar_config:consult_file(File) of case rebar_config:consult_file(File) of
{ok, Terms} -> {ok, Terms} ->
dict:from_list(Terms); OverrideVars = dict:from_list(Terms),
M = fun merge_overlay_var/3,
load_vars_file(Files, dict:merge(M, BaseVars, OverrideVars));
{error, Reason} -> {error, Reason} ->
?ABORT("Unable to load overlay_vars from ~p: ~p\n", [File, Reason]) ?ABORT("Unable to load overlay_vars from ~p: ~p\n", [File, Reason])
end. end.