aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Sloughter <[email protected]>2019-08-13 09:25:26 -0600
committerGitHub <[email protected]>2019-08-13 09:25:26 -0600
commitdef78e1c07c2ae79b8ba5293365a466e79a88b15 (patch)
tree2f3fbf7a07136767fddd8342e01eb0fddc777620
parent912f513028dee5b0e0900a8d5e3430669fccaf4c (diff)
parente644d7c078c9b75edf1ba513a030d33921af8192 (diff)
downloadrelx-def78e1c07c2ae79b8ba5293365a466e79a88b15.tar.gz
relx-def78e1c07c2ae79b8ba5293365a466e79a88b15.tar.bz2
relx-def78e1c07c2ae79b8ba5293365a466e79a88b15.zip
Merge pull request #747 from arcusfelis/template-redefined-variable
Correctly render redefined variable
-rw-r--r--src/rlx_prv_overlay.erl6
-rw-r--r--test/rlx_release_SUITE.erl12
-rw-r--r--test/rlx_test_utils.erl3
3 files changed, 16 insertions, 5 deletions
diff --git a/src/rlx_prv_overlay.erl b/src/rlx_prv_overlay.erl
index 87fa91f..75608b3 100644
--- a/src/rlx_prv_overlay.erl
+++ b/src/rlx_prv_overlay.erl
@@ -187,9 +187,11 @@ merge_overlay_vars(State, FileNames) ->
%% to the current one being read
OverlayRelativeRoot = filename:dirname(FileName),
NewTerms = check_overlay_inclusion(State, OverlayRelativeRoot, Terms),
+ %% Remove already defined variables from Acc,
+ %% append NewTerms, preserving order
lists:foldl(fun(NewTerm, A) ->
- lists:keystore(element(1, NewTerm), 1, A, NewTerm)
- end, Acc, NewTerms);
+ lists:keydelete(element(1, NewTerm), 1, A)
+ end, Acc, NewTerms) ++ NewTerms;
{error, Reason} ->
ec_cmd_log:warn(rlx_state:log(State),
format_error({unable_to_read_varsfile, FileName, Reason})),
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl
index 752ce18..d7340de 100644
--- a/test/rlx_release_SUITE.erl
+++ b/test/rlx_release_SUITE.erl
@@ -818,14 +818,18 @@ overlay_release(Config) ->
goal_app_2]}]),
VarsFile1 = filename:join([LibDir1, "vars1.config"]),
+ %% tpl_var is defined in vars1, but redifined in vars2 using template.
rlx_test_utils:write_config(VarsFile1, [{yahoo, "yahoo"},
{yahoo2, [{foo, "bar"}]},
{foo_yahoo, "foo_{{yahoo}}"},
- {foo_dir, "foodir"}]),
+ {foo_dir, "foodir"},
+ {tpl_var, "defined in vars1"}]),
VarsFile2 = filename:join([LibDir1, "vars2.config"]),
rlx_test_utils:write_config(VarsFile2, [{google, "yahoo"},
{yahoo2, "foo"},
+ {tpl_arg, "a template value"},
+ {tpl_var, "Redefined in vars2 with {{tpl_arg}}"},
OverlayVars3]),
VarsFile3 = filename:join([LibDir1, "vars3.config"]),
@@ -894,7 +898,11 @@ overlay_release(Config) ->
?assertEqual("val1",
proplists:get_value(prop1, TemplateData)),
?assertEqual(2,
- proplists:get_value(prop2, TemplateData)).
+ proplists:get_value(prop2, TemplateData)),
+ %% This should be rendered correctly based on VarsFile2 file, regardless
+ %% of tpl_var defined in VarsFile1 or not.
+ ?assertEqual("Redefined in vars2 with a template value",
+ proplists:get_value(tpl_var, TemplateData)).
make_goalless_release(Config) ->
LibDir1 = proplists:get_value(lib1, Config),
diff --git a/test/rlx_test_utils.erl b/test/rlx_test_utils.erl
index 37d9c7a..5328559 100644
--- a/test/rlx_test_utils.erl
+++ b/test/rlx_test_utils.erl
@@ -185,7 +185,8 @@ test_template_contents() ->
"{foo_yahoo, \"{{foo_yahoo}}\"}.\n"
"{google, \"{{google}}\"}.\n"
"{prop1, \"{{prop1}}\"}.\n"
- "{prop2, {{prop2}}}.\n".
+ "{prop2, {{prop2}}}.\n"
+ "{tpl_var, \"{{tpl_var}}\"}.\n".
escript_contents() ->
"#!/usr/bin/env escript\n"