diff options
author | Tristan Sloughter <t@crashfast.com> | 2019-08-13 09:25:26 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-13 09:25:26 -0600 |
commit | def78e1c07c2ae79b8ba5293365a466e79a88b15 (patch) | |
tree | 2f3fbf7a07136767fddd8342e01eb0fddc777620 | |
parent | 912f513028dee5b0e0900a8d5e3430669fccaf4c (diff) | |
parent | e644d7c078c9b75edf1ba513a030d33921af8192 (diff) | |
download | relx-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.erl | 6 | ||||
-rw-r--r-- | test/rlx_release_SUITE.erl | 12 | ||||
-rw-r--r-- | test/rlx_test_utils.erl | 3 |
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" |