summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rebar_dir.erl36
-rw-r--r--src/rebar_relx.erl10
2 files changed, 34 insertions, 12 deletions
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}