summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedram Nimreezi <deadzen@deadzen.com>2013-02-04 15:20:30 -0500
committerPedram Nimreezi <deadzen@deadzen.com>2013-03-26 05:23:47 -0400
commitdf7cfba71f530f9009e3afdd9efb4a28b3b9f91a (patch)
treeabb5bd8b04d3bc895584a1d00991ea55dfbd70ca
parent720d71e47dcc7ffffba032395611228e321e6fb9 (diff)
Implement merged overlays
This allows overlay_vars to merge comma delimited var config files
-rw-r--r--src/rebar_reltool.erl26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/rebar_reltool.erl b/src/rebar_reltool.erl
index 18b0702..9f9488e 100644
--- a/src/rebar_reltool.erl
+++ b/src/rebar_reltool.erl
@@ -166,22 +166,32 @@ process_overlay(Config, ReltoolConfig) ->
%% providing an additional file on the command-line.
%%
overlay_vars(Config, Vars0, ReltoolConfig) ->
- BaseVars = load_vars_file(proplists:get_value(overlay_vars, ReltoolConfig)),
- OverrideVars = load_vars_file(rebar_config:get_global(Config,
- overlay_vars,
- undefined)),
- M = fun(_Key, _Base, Override) -> Override end,
+ BaseVars = load_vars_file([proplists:get_value(overlay_vars, ReltoolConfig)]),
+ OverlayVars = rebar_config:get_global(Config, overlay_vars, []),
+ OverrideVars = load_vars_file(string:tokens(OverlayVars, ",")),
+ M = fun merge_overlay_var/3,
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
%%
-load_vars_file(undefined) ->
+load_vars_file([undefined]) ->
+ dict:new();
+load_vars_file([]) ->
dict:new();
-load_vars_file(File) ->
+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
{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} ->
?ABORT("Unable to load overlay_vars from ~p: ~p\n", [File, Reason])
end.