summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2019-10-04 10:55:45 -0400
committerGitHub <noreply@github.com>2019-10-04 10:55:45 -0400
commit8cdf023455bed2601b8bebe807b0c4acfecf5d0d (patch)
tree68be31c69ed37532a1e7944b08259fbaa020b568
parentbc8e5ef26a6206f1d671c556ab0d442620f1a046 (diff)
parentdf808931cc72348b5375e041e9b2821f660c1ef4 (diff)
Merge pull request #2155 from g-andrade/feature/profile-string-overlay-var
Support `profile_string` overlay var in releases
-rw-r--r--THANKS1
-rw-r--r--src/rebar_dir.erl36
-rw-r--r--src/rebar_relx.erl10
-rw-r--r--test/rebar_release_SUITE.erl6
4 files changed, 39 insertions, 14 deletions
diff --git a/THANKS b/THANKS
index 095a48b..3cccd19 100644
--- a/THANKS
+++ b/THANKS
@@ -143,3 +143,4 @@ Drew Varner
Niklas Johansson
Bryan Paxton
Justin Wood
+Guilherme Andrade
diff --git a/src/rebar_dir.erl b/src/rebar_dir.erl
index aac6210..07d8a2c 100644
--- a/src/rebar_dir.erl
+++ b/src/rebar_dir.erl
@@ -3,6 +3,7 @@
-export([base_dir/1,
profile_dir/2,
+ profile_dir_name/1,
deps_dir/1,
deps_dir/2,
root_dir/1,
@@ -39,18 +40,33 @@ base_dir(State) ->
%% @doc returns the directory root for build artifacts for a given set
%% of profiles.
--spec profile_dir(rebar_dict(), [atom()]) -> file:filename_all().
+-spec profile_dir(rebar_dict(), [atom(), ...]) -> file:filename_all().
profile_dir(Opts, Profiles) ->
- {BaseDir, ProfilesStrings} = case [rebar_utils:to_list(P) || P <- Profiles] of
- ["global" | _] -> {?MODULE:global_cache_dir(Opts), [""]};
- ["bootstrap", "default"] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), ["default"]};
- ["default"] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), ["default"]};
- %% drop `default` from the profile dir if it's implicit and reverse order
+ BasePath =
+ case Profiles of
+ [global | _] -> ?MODULE:global_cache_dir(Opts);
+ [_|_] -> rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR)
+ end,
+ DirName = profile_dir_name_(Profiles),
+ filename:join(BasePath, DirName).
+
+%% @doc returns the directory name for build artifacts for a given set
+%% of profiles.
+-spec profile_dir_name(rebar_state:t()) -> file:filename_all().
+profile_dir_name(State) ->
+ profile_dir_name_(rebar_state:current_profiles(State)).
+
+-spec profile_dir_name_([atom(), ...]) -> file:filename_all().
+profile_dir_name_(Profiles)
+ when is_list(Profiles) ->
+ case [rebar_utils:to_list(P) || P <- Profiles] of
+ ["global" | _] -> "";
+ ["bootstrap", "default"] -> "default";
+ ["default"] -> "default";
+ %% drop `default' from the profile dir if it's implicit and reverse order
%% of profiles to match order passed to `as`
- ["default"|Rest] -> {rebar_opts:get(Opts, base_dir, ?DEFAULT_BASE_DIR), Rest}
- end,
- ProfilesDir = rebar_string:join(ProfilesStrings, "+"),
- filename:join(BaseDir, ProfilesDir).
+ ["default"|NonDefaultNames] -> rebar_string:join(NonDefaultNames, "+")
+ end.
%% @doc returns the directory where dependencies should be placed
%% given the current profile.
diff --git a/src/rebar_relx.erl b/src/rebar_relx.erl
index 431e1bc..996c0a3 100644
--- a/src/rebar_relx.erl
+++ b/src/rebar_relx.erl
@@ -27,10 +27,12 @@ do(Module, Command, Provider, State) ->
LibDirs = rebar_utils:filtermap(fun ec_file:exists/1,
[rebar_dir:checkouts_dir(State), DepsDir | ProjectAppDirs]),
OutputDir = filename:join(rebar_dir:base_dir(State), ?DEFAULT_RELEASE_DIR),
+ ProfileString = rebar_dir:profile_dir_name(State),
AllOptions = rebar_string:join([Command | Options], " "),
Cwd = rebar_state:dir(State),
Providers = rebar_state:providers(State),
RebarOpts = rebar_state:opts(State),
+ ExtraOverlays = [{profile_string, ProfileString}],
ErlOpts = rebar_opts:erl_opts(RebarOpts),
rebar_hooks:run_project_and_app_hooks(Cwd, pre, Provider, Providers, State),
try
@@ -38,14 +40,18 @@ do(Module, Command, Provider, State) ->
[] ->
relx:main([{lib_dirs, LibDirs}
,{caller, api}
- ,{log_level, LogLevel} | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions);
+ ,{log_level, LogLevel}
+ ,{api_caller_overlays, ExtraOverlays}
+ | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions);
Config ->
Config1 = [{overlay_vars, [{base_dir, rebar_dir:base_dir(State)}]}
| merge_overlays(Config)],
relx:main([{lib_dirs, LibDirs}
,{config, Config1}
,{caller, api}
- ,{log_level, LogLevel} | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions)
+ ,{log_level, LogLevel}
+ ,{api_caller_overlays, ExtraOverlays}
+ | output_dir(OutputDir, Options)] ++ ErlOpts, AllOptions)
end,
rebar_hooks:run_project_and_app_hooks(Cwd, post, Provider, Providers, State),
{ok, State}
diff --git a/test/rebar_release_SUITE.erl b/test/rebar_release_SUITE.erl
index 1bcc61e..1785a97 100644
--- a/test/rebar_release_SUITE.erl
+++ b/test/rebar_release_SUITE.erl
@@ -301,7 +301,8 @@ overlay_vars(Config) ->
{var_bin_string, {{{var_bin_string}}}},
{var_tuple, {{{var_tuple}}}},
{var_list, {{{var_list}}}},
- {var_bin, {{{var_bin}}}}]],
+ {var_bin, {{{var_bin}}}},
+ {var_profile_string, {{profile_string}}}]], % this comes from `rebar3'
rebar_test_utils:create_config(AppDir,
filename:join([AppDir, "config", "app.config"]),
AppConfig),
@@ -318,6 +319,7 @@ overlay_vars(Config) ->
{var_bin_string, <<"test">>},
{var_tuple, {t, ['atom']}},
{var_list, [a, b, c, 'd']},
- {var_bin, <<23, 24, 25>>}],
+ {var_bin, <<23, 24, 25>>},
+ {var_profile_string, 'default'}],
{ok, [ExpectedSysconfig]} = file:consult(filename:join([AppDir, "_build/default/rel",
Name, "releases", Vsn, "sys.config"])).